@ynput/ayon-frontend-shared 0.3.15 → 0.3.17

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 (419) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +28 -24
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/Views.cjs.js +1 -1
  5. package/dist/Views.cjs.js.map +1 -1
  6. package/dist/Views.es.js +36 -41
  7. package/dist/Views.es.js.map +1 -1
  8. package/dist/_virtual/index.cjs.js +1 -1
  9. package/dist/_virtual/index.cjs2.js +1 -1
  10. package/dist/_virtual/index.cjs3.js +1 -1
  11. package/dist/_virtual/index.cjs4.js +1 -1
  12. package/dist/_virtual/index.cjs5.js +1 -1
  13. package/dist/_virtual/index.cjs6.js +1 -1
  14. package/dist/_virtual/index.cjs8.js +1 -1
  15. package/dist/_virtual/index.es.js +4 -5
  16. package/dist/_virtual/index.es2.js +6 -2
  17. package/dist/_virtual/index.es2.js.map +1 -1
  18. package/dist/_virtual/index.es3.js +2 -5
  19. package/dist/_virtual/index.es3.js.map +1 -1
  20. package/dist/_virtual/index.es4.js +5 -2
  21. package/dist/_virtual/index.es4.js.map +1 -1
  22. package/dist/_virtual/index.es5.js +2 -5
  23. package/dist/_virtual/index.es5.js.map +1 -1
  24. package/dist/_virtual/index.es6.js +5 -2
  25. package/dist/_virtual/index.es6.js.map +1 -1
  26. package/dist/_virtual/index.es7.js +2 -2
  27. package/dist/_virtual/index.es8.js +2 -5
  28. package/dist/_virtual/index.es8.js.map +1 -1
  29. package/dist/index.cjs.js +1 -1
  30. package/dist/index.es.js +15 -11
  31. package/dist/index.es.js.map +1 -1
  32. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  33. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  34. package/dist/node_modules/react-use-websocket/dist/index.cjs.js +1 -1
  35. package/dist/node_modules/react-use-websocket/dist/index.es.js +1 -1
  36. package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
  37. package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js.map +1 -1
  38. package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
  39. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  40. package/dist/node_modules/remove-accents/index.es.js +1 -1
  41. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  42. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  43. package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
  44. package/dist/shared/node_modules/react-is/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/access.cjs.js.map +1 -1
  52. package/dist/shared/src/api/generated/access.es.js.map +1 -1
  53. package/dist/shared/src/api/generated/graphql.cjs.js +5 -3
  54. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  55. package/dist/shared/src/api/generated/graphql.es.js +2 -0
  56. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  57. package/dist/shared/src/api/generated/users.cjs.js.map +1 -1
  58. package/dist/shared/src/api/generated/users.es.js.map +1 -1
  59. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +1 -1
  60. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
  61. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +99 -90
  62. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
  63. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +13 -1
  64. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
  65. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +72 -25
  66. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
  67. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  68. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  69. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +25 -21
  70. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  71. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  72. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  73. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +14 -14
  74. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  75. package/dist/shared/src/components/LinksManager/CellEditingDialog.cjs.js +1 -1
  76. package/dist/shared/src/components/LinksManager/CellEditingDialog.cjs.js.map +1 -1
  77. package/dist/shared/src/components/LinksManager/CellEditingDialog.es.js +23 -23
  78. package/dist/shared/src/components/LinksManager/CellEditingDialog.es.js.map +1 -1
  79. package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js +1 -1
  80. package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js.map +1 -1
  81. package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js +71 -36
  82. package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js.map +1 -1
  83. package/dist/shared/src/components/LinksManager/LinksManager.cjs.js +1 -1
  84. package/dist/shared/src/components/LinksManager/LinksManager.cjs.js.map +1 -1
  85. package/dist/shared/src/components/LinksManager/LinksManager.es.js +120 -89
  86. package/dist/shared/src/components/LinksManager/LinksManager.es.js.map +1 -1
  87. package/dist/shared/src/components/LinksManager/LinksManager.styled.cjs.js +52 -12
  88. package/dist/shared/src/components/LinksManager/LinksManager.styled.cjs.js.map +1 -1
  89. package/dist/shared/src/components/LinksManager/LinksManager.styled.es.js +63 -21
  90. package/dist/shared/src/components/LinksManager/LinksManager.styled.es.js.map +1 -1
  91. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  92. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  93. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +8 -4
  94. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  95. package/dist/shared/src/components/LinksManager/utils/groupLinks.cjs.js +2 -0
  96. package/dist/shared/src/components/LinksManager/utils/groupLinks.cjs.js.map +1 -0
  97. package/dist/shared/src/components/LinksManager/utils/groupLinks.es.js +18 -0
  98. package/dist/shared/src/components/LinksManager/utils/groupLinks.es.js.map +1 -0
  99. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  100. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  101. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +8 -4
  102. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  103. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
  104. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  105. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +10 -6
  106. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  107. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  108. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  109. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +8 -4
  110. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  111. package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js +1 -1
  112. package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js.map +1 -1
  113. package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js +8 -4
  114. package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js.map +1 -1
  115. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +1 -1
  116. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
  117. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +8 -4
  118. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
  119. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
  120. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  121. package/dist/shared/src/components/RenameForm/RenameForm.es.js +9 -5
  122. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  123. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  124. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  125. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +139 -128
  126. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  127. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  128. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  129. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +90 -81
  130. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  131. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  132. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  133. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +8 -4
  134. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  135. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.cjs.js +1 -1
  136. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.cjs.js.map +1 -1
  137. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.es.js +9 -5
  138. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.es.js.map +1 -1
  139. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  140. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  141. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +8 -4
  142. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  143. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
  144. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  145. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +8 -4
  146. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  147. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  148. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  149. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +8 -4
  150. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  151. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  152. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  153. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +8 -4
  154. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  155. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  156. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  157. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +20 -16
  158. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  159. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  160. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  161. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js +8 -4
  162. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  163. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  164. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  165. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js +9 -5
  166. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  167. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  168. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  169. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js +12 -8
  170. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  171. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js +1 -1
  172. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js.map +1 -1
  173. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js +22 -18
  174. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js.map +1 -1
  175. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js +1 -1
  176. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
  177. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js +8 -4
  178. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js.map +1 -1
  179. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js +1 -1
  180. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js.map +1 -1
  181. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js +8 -4
  182. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js.map +1 -1
  183. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +2 -2
  184. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  185. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +57 -45
  186. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  187. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  188. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  189. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +8 -4
  190. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  191. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  192. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  193. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +8 -4
  194. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  195. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  196. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  197. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +8 -4
  198. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  199. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js.map +1 -1
  200. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js.map +1 -1
  201. package/dist/shared/src/containers/EntityPickerDialog/hooks/usePreserveChildSelectionByName.cjs.js +2 -0
  202. package/dist/shared/src/containers/EntityPickerDialog/hooks/usePreserveChildSelectionByName.cjs.js.map +1 -0
  203. package/dist/shared/src/containers/EntityPickerDialog/hooks/usePreserveChildSelectionByName.es.js +70 -0
  204. package/dist/shared/src/containers/EntityPickerDialog/hooks/usePreserveChildSelectionByName.es.js.map +1 -0
  205. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
  206. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  207. package/dist/shared/src/containers/Feed/Feed.es.js +247 -151
  208. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  209. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js +1 -1
  210. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js.map +1 -1
  211. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js +8 -4
  212. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js.map +1 -1
  213. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  214. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  215. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +6 -2
  216. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  217. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.cjs.js +1 -0
  218. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.cjs.js.map +1 -1
  219. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.es.js +1 -0
  220. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.es.js.map +1 -1
  221. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +1 -1
  222. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -1
  223. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +9 -5
  224. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
  225. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +1 -1
  226. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
  227. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +8 -4
  228. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
  229. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.styled.cjs.js +1 -1
  230. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.styled.cjs.js.map +1 -1
  231. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.styled.es.js +3 -3
  232. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.styled.es.js.map +1 -1
  233. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  234. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  235. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +8 -4
  236. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  237. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  238. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  239. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +59 -55
  240. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  241. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  242. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  243. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +9 -5
  244. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  245. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js +1 -1
  246. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js.map +1 -1
  247. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js +8 -4
  248. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js.map +1 -1
  249. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
  250. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  251. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +6 -2
  252. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  253. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  254. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  255. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +8 -4
  256. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  257. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  258. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  259. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +8 -4
  260. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  261. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.cjs.js +1 -1
  262. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.cjs.js.map +1 -1
  263. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.es.js +16 -16
  264. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.es.js.map +1 -1
  265. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  266. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  267. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +6 -2
  268. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  269. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  270. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  271. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +9 -5
  272. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  273. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  274. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  275. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +6 -2
  276. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  277. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  278. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  279. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +8 -4
  280. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  281. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  282. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  283. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +8 -4
  284. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  285. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
  286. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
  287. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +6 -2
  288. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
  289. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  290. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  291. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +6 -2
  292. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  293. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
  294. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
  295. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +6 -2
  296. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
  297. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  298. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  299. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +8 -4
  300. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  301. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  302. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  303. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +8 -4
  304. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  305. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  306. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  307. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +6 -2
  308. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  309. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  310. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  311. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +6 -2
  312. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  313. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js +1 -1
  314. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js.map +1 -1
  315. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js +6 -2
  316. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
  317. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  318. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  319. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +17 -13
  320. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  321. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +1 -1
  322. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  323. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +7 -3
  324. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  325. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  326. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  327. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +60 -48
  328. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  329. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  330. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  331. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +6 -2
  332. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  333. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
  334. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
  335. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +8 -4
  336. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
  337. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  338. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +24 -24
  339. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  340. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  341. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +8 -4
  342. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  343. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +1 -1
  344. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -1
  345. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +8 -4
  346. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -1
  347. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.cjs.js.map +1 -1
  348. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.es.js.map +1 -1
  349. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
  350. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
  351. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +8 -4
  352. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
  353. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +2 -2
  354. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
  355. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +24 -23
  356. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
  357. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  358. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  359. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +83 -88
  360. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  361. package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.cjs.js +1 -1
  362. package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.cjs.js.map +1 -1
  363. package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.es.js +1 -1
  364. package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.es.js.map +1 -1
  365. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +1 -1
  366. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -1
  367. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +56 -53
  368. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
  369. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js +1 -1
  370. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js.map +1 -1
  371. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js +23 -144
  372. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js.map +1 -1
  373. package/dist/shared/src/containers/Views/hooks/useViewSettingsChanged.cjs.js.map +1 -1
  374. package/dist/shared/src/containers/Views/hooks/useViewSettingsChanged.es.js.map +1 -1
  375. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js.map +1 -1
  376. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js.map +1 -1
  377. package/dist/shared/src/containers/Views/types.cjs.js +2 -0
  378. package/dist/shared/src/containers/Views/types.cjs.js.map +1 -0
  379. package/dist/shared/src/containers/Views/types.es.js +15 -0
  380. package/dist/shared/src/containers/Views/types.es.js.map +1 -0
  381. package/dist/shared/src/containers/Views/utils/getCustomViewsFallback.cjs.js.map +1 -1
  382. package/dist/shared/src/containers/Views/utils/getCustomViewsFallback.es.js.map +1 -1
  383. package/dist/shared/src/containers/Views/utils/isViewStudioScope.cjs.js +2 -0
  384. package/dist/shared/src/containers/Views/utils/isViewStudioScope.cjs.js.map +1 -0
  385. package/dist/shared/src/containers/Views/utils/isViewStudioScope.es.js +5 -0
  386. package/dist/shared/src/containers/Views/utils/isViewStudioScope.es.js.map +1 -0
  387. package/dist/shared/src/containers/Views/utils/portalUtils.cjs.js.map +1 -1
  388. package/dist/shared/src/containers/Views/utils/portalUtils.es.js.map +1 -1
  389. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
  390. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  391. package/dist/shared/src/context/DetailsPanelContext.es.js +76 -77
  392. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  393. package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
  394. package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
  395. package/dist/shared/src/context/WebsocketContext.es.js +9 -5
  396. package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
  397. package/dist/types/api/generated/access.d.ts +6 -0
  398. package/dist/types/api/generated/graphql.d.ts +8 -4
  399. package/dist/types/api/generated/users.d.ts +6 -1
  400. package/dist/types/components/AttributeEditor/AttributeEditor.d.ts +1 -0
  401. package/dist/types/components/LinksManager/LinkManagerItem.d.ts +2 -0
  402. package/dist/types/components/LinksManager/LinksManager.styled.d.ts +6 -0
  403. package/dist/types/components/LinksManager/utils/groupLinks.d.ts +14 -0
  404. package/dist/types/components/ReviewablesList/ReviewablesUpload.d.ts +1 -0
  405. package/dist/types/containers/EntityPickerDialog/hooks/useGetEntityPickerData.d.ts +1 -1
  406. package/dist/types/containers/EntityPickerDialog/hooks/usePreserveChildSelectionByName.d.ts +11 -0
  407. package/dist/types/containers/ProjectTreeTable/types/table.d.ts +1 -0
  408. package/dist/types/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.d.ts +2 -1
  409. package/dist/types/containers/Views/ViewsMenuContainer/ViewsMenuContainer.d.ts +2 -2
  410. package/dist/types/containers/Views/context/ViewsContext.d.ts +3 -2
  411. package/dist/types/containers/Views/hooks/useBaseViewMutations.d.ts +1 -1
  412. package/dist/types/containers/Views/hooks/useBuildViewMenuItems.d.ts +2 -3
  413. package/dist/types/containers/Views/hooks/useSaveViewFromCurrent.d.ts +2 -1
  414. package/dist/types/containers/Views/hooks/useViewSettingsChanged.d.ts +1 -1
  415. package/dist/types/containers/Views/index.d.ts +1 -7
  416. package/dist/types/containers/Views/types.d.ts +10 -0
  417. package/dist/types/containers/Views/utils/isViewStudioScope.d.ts +2 -0
  418. package/dist/types/containers/Views/utils/portalUtils.d.ts +1 -1
  419. package/package.json +1 -1
@@ -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 productBaseType: 'review',\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","folderId","productId","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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAMA,KAAmD;AAAA,EACvD,EAAE,IAAI,aAAa,OAAO,oBAAoB,MAAM,sBAAA;AAAA,EACpD,EAAE,IAAI,WAAW,OAAO,kBAAkB,MAAM,SAAA;AAClD,GAEaC,KAAsB,CAAC;AAAA,EAClC,UAAAC,IAAW,CAAA;AAAA,EACX,YAAAC;AAAA,EACA,UAAAC,IAAW,CAAA;AAAA,EACX,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,kBAAAC;AACF,MAAgC;AAC9B,QAAM,EAAE,UAAAC,EAAA,IAAaC,GAAA,GAEf,CAACC,GAAgBC,CAAiB,IAAIC,EAAS,EAAK,GACpD,CAACC,GAAcC,CAAe,IAAIF,EAA4B,IAAI,GAClEG,IAAiBC,EAAO,CAAC,GAGzB,CAACC,GAAeC,CAAgB,IAAIN,EAA4B,IAAI,GACpE,CAACO,GAAUC,CAAW,IAAIR,EAAS,CAAC,GAGpC,CAACS,GAAmBC,CAAoB,IAAIV,EAAS,EAAK,GAC1D,CAACW,GAAcC,CAAe,IAAIZ,EAA0B,IAAI,GAGhEa,IAAerB,EAAS,WAAW,IAAIA,EAAS,CAAC,IAAI,MAErDsB,IAA6BD,GAAc,MAAM,IACjDE,IAA+BF,GAAc,QAAQ,IACrDG,IAAgCH,GAAc,SAAS,IACvDI,IAAgCJ,GAAc,IAC9CK,IAAoB,GAAQL,KAAgBtB,MAAe,mBAG3D,EAAE,kBAAkB4B,EAAA,IAA0BC,GAAqB;AAAA,IACvE,aAAA3B;AAAA,IACA,WAAAwB;AAAA,IACA,QAAAH;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAApB;AAAA,IACA,UAAU,MAAM;AACd,MAAAU,EAAiB,IAAI,GACrBE,EAAY,CAAC;AAAA,IACf;AAAA,IACA,YAAY,CAACD,MAAa;AACxB,MAAAC,EAAYD,CAAQ;AAAA,IACtB;AAAA,EAAA,CACD,GAGKc,IAAqBjC,GAAU,OAAO,CAACkC,MACvCA,EAAK,OAAO,YACPJ,IAEF,EACR,GAEKK,IAAa,MAAM;AACvB,IAAAjB,EAAiB,IAAI,GACrBP,EAAkB,EAAK,GACvBG,EAAgB,IAAI,GACpBC,EAAe,UAAU,GACzBK,EAAY,CAAC,GACbE,EAAqB,EAAK,GAC1BE,EAAgB,IAAI;AAAA,EACtB,GAGMY,IAAqB,OAAOC,MAAwB;AACxD,QAAI,CAACd,KAAgB,CAACE,GAAc;AAClC,MAAAH,EAAqB,EAAK,GAC1BE,EAAgB,IAAI;AACpB;AAAA,IACF;AAEA,UAAMc,IAAgBC,GAAoBF,CAAW;AAErD,QAAI,CAACC,EAAc,QAAQ;AACzB,MAAAE,EAAM;AAAA,QACJ;AAAA,MAAA;AAEF;AAAA,IACF;AAEA,QAAI;AACF,UAAI,CAACb;AACH,cAAM,IAAI,MAAM,2CAA2C;AAE7D,MAAAT,EAAiB,SAAS;AAG1B,YAAMuB,IAAa,MAAMC,GAAoBC,IAAetC,GAAa;AAAA,QACvE,UAAAsB;AAAA,QACA,MAAMW;AAAA,QACN,aAAa;AAAA;AAAA,QACb,iBAAiB;AAAA,MAAA,CAClB;AAGD,MAAAhB,EAAqB,EAAK,GAC1B,MAAMsB,EAAyBrB,GAAckB,EAAW,EAAE,GAC1DjB,EAAgB,IAAI;AAAA,IACtB,SAASqB,GAAY;AACnB,MAAAC,EAAkBD,GAAO,kBAAkB,GAC3CV,EAAA;AAAA,IACF;AAAA,EACF,GAGMY,IAAqB,MAAM;AAC/B,IAAAzB,EAAqB,EAAK,GAC1BE,EAAgB,IAAI,GACpBW,EAAA;AAAA,EACF,GAEM,CAACa,CAAa,IAAIC,GAAA,GAClB,CAACN,EAAa,IAAIO,GAAA,GAElBC,IAAsB,OAAOC,MAAoB;AACrD,QAAI,CAACtB,KAAqB,CAACL;AACzB,aAAAe,EAAM,MAAM,yDAAyD,GAC9DL,EAAA;AAGT,UAAMP,IAAYH,EAAa,SAAS;AACxC,QAAI,CAACG,GAAW;AAEd,MAAAJ,EAAgB4B,CAAK,GACrB9B,EAAqB,EAAI;AACzB;AAAA,IACF;AAGA,UAAMsB,EAAyBQ,GAAOxB,CAAS;AAAA,EACjD,GAGMgB,IAA2B,OAAOQ,GAAiBxB,MAAsB;AAC7E,QAAI;AACF,YAAMyB,IAAcC,GAAqB7B,EAAc,SAAS,aAAa,GAGvE8B,IAAa,MAAMC,GAAoBR,GAAe3C,GAAa;AAAA,QACvE,WAAAuB;AAAAA,QACA,QAAAF;AAAA;AAAA,QACA,SAAS2B;AAAA,MAAA,CACV;AAED,YAAMtB,EAAsBqB,GAAOG,EAAW,EAAE,GAEhDpB,EAAA,GAGA5B,IAAmBgD,EAAW,EAAE;AAAA,IAClC,SAASV,GAAY;AACnB,MAAAC,EAAkBD,GAAO,mBAAmB,GAC5CV,EAAA;AAAA,IACF;AAAA,EACF,GAGMsB,IAA8B,OAAOC,IAAoB,OAAO;AAKpE,QAHA/C,EAAkB,EAAK,GAGnB,CAACP,EAAS;AACZ;AAIF,UAAMuD,KAAe,oBAAI,KAAA,GAAO,YAAA;AAEhC,QAAIC,IAA0B,CAAA;AAG9B,eAAWC,KAAUH,GAAY;AAC/B,YAAMI,IAAgB1D,EAAS,KAAK,CAAC2D,MAAMA,EAAE,OAAOF,EAAO,EAAE;AAC7D,UAAI,CAACC,EAAe;AACA,MAAAD,EAAO;AAC3B,YAAMG,IAAmBH,EAAO,SAAS,CAAA;AAEzC,MAAAD,EAAW,KAAK;AAAA,QACd,IAAIE,EAAc;AAAA,QAClB,aAAaA,EAAc;AAAA,QAC3B,MAAM,EAAE,WAAWH,EAAA;AAAA,QACnB,kBAAAK;AAAA,MAAA,CACD,GAGYF,EAAc;AAAA,IAM7B;AAEA,QAAI;AACF,YAAMG,GAAe,EAAE,YAAAL,GAAY,YAAAzD,GAAY,GAC/CG,KAAcA,EAAWsD,CAAU;AAAA,IACrC,SAASf,GAAO;AACd,cAAQ,MAAM,8BAA8BA,CAAK;AAAA,IACnD;AAAA,EACF,GAEMqB,IAAwB,OAAOC,MAAe;AAClD,QAAI,CAACA,EAAM,QAAOhC,EAAA;AAElB,QAAI;AAEF,UAAI,CAACgC,EAAK,KAAK,SAAS,OAAO;AAC7B,cAAM,IAAI,MAAM,sBAAsB;AAGxC,UAAIC,IAAW,CAAA;AACf,iBAAWP,KAAUzD,GAAU;AAC7B,cAAM,EAAE,IAAAiE,GAAI,YAAAlE,GAAY,aAAAE,MAAgBwD;AAExC,YAAI,CAACxD,EAAa,OAAM,IAAI,MAAM,0BAA0B;AAE5D,cAAMiE,KAAUC,GAAM;AAAA,UACpBlE,KAAe,iBAAiBA,CAAW,IAAIF,CAAU,KAAKkE,CAAE;AAAA,UAChEF;AAAA,UACA;AAAA,YACE,kBAAkB,CAACJ,MAAM;AACvB,cAAA3C,EAAY,KAAK,MAAO,MAAM2C,EAAE,UAAWA,EAAE,SAASI,EAAK,KAAK,CAAC;AAAA,YACnE;AAAA,YACA,SAAS;AAAA,cACP,gBAAgBA,EAAK;AAAA,YAAA;AAAA,UACvB;AAAA,QACF;AAGF,QAAAC,EAAS,KAAKE,EAAO;AAAA,MACvB;AAIA,YAAME,KAFM,MAAM,QAAQ,IAAIJ,CAAQ,GAEV,IAAI,CAACK,GAAKC,OAAO;AAAA,QAC3C,aAAaD,EAAI,KAAK;AAAA,QACtB,IAAIrE,EAASsE,CAAC,EAAE;AAAA,MAAA,EAChB;AAEF,MAAAjB,EAA4Be,CAAe,GAC3CrC,EAAA;AAAA,IACF,SAASU,GAAY;AACnB,cAAQ,MAAMA,CAAK,GACnBL,EAAM,MAAMK,EAAM,OAAO,GACzBV,EAAA;AAAA,IACF;AAAA,EACF,GAEM,CAAC8B,EAAc,IAAIU,GAAA,GAEnBC,KAAkB,CAACb,MAAuB;AAC9C,IAAAA,EAAE,eAAA,GACFhD,EAAe,WACXA,EAAe,YAAY,KAC7BJ,EAAkB,EAAI;AAAA,EAE1B,GAEMkE,KAAkB,CAACd,MAAuB;AAC9C,IAAAA,EAAE,eAAA,GACFhD,EAAe,WACXA,EAAe,YAAY,MAC7BJ,EAAkB,EAAK,GACvBG,EAAgB,IAAI;AAAA,EAExB,GAEMgE,KAAiB,CAACf,MAAuB;AAC7C,IAAAA,EAAE,eAAA;AAAA,EACJ,GAEMgB,KAAa,CAAChB,MAAuB;AAMzC,QALAA,EAAE,eAAA,GACFhD,EAAe,UAAU,GACzBJ,EAAkB,EAAK,GACvBG,EAAgB,IAAI,GAEhB,GAACiD,EAAE,aAAa,SAASA,EAAE,aAAa,MAAM,WAAW,IAI7D;AAAA,UAAIlD,MAAiB,aAAa;AAChC,QAAAK,EAAiB,WAAW;AAC5B,cAAMiD,IAAOJ,EAAE,aAAa,MAAM,CAAC;AAEnC,QAAAG,EAAsBC,CAAI;AAAA,MAC5B;AAEA,UAAItD,MAAiB,WAAW;AAC9B,QAAAK,EAAiB,SAAS;AAC1B,cAAMkC,IAAQW,EAAE,aAAa;AAE7B,QAAAZ,EAAoBC,CAAK;AAAA,MAC3B;AAAA;AAAA,EACF,GAGM4B,IAAoB,OAAOC,GAAsCC,MAAqB;AAC1F,UAAM9B,IAAQ6B,EAAM,OAAO;AAC3B,IAAI,CAAC7B,KAASA,EAAM,WAAW,MAI3B8B,MAAS,cACXhE,EAAiB,SAAS,GAC1BiC,EAAoBC,CAAK,IAEvB8B,MAAS,gBACXhE,EAAiB,WAAW,GAC5BgD,EAAsBd,EAAM,CAAC,CAAC;AAAA,EAElC,GAEM+B,IAAoBnE,EAAyB,IAAI,GACjDoE,IAAmBpE,EAAyB,IAAI;AAEtD,SACEqE,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,UAAAlF;AAAA,MACA,uBAAuBqD;AAAA,MACvB,mBAAA0B;AAAA,MACA,kBAAkBrD,IAAoBsD,IAAmB;AAAA,MAEzD,UAAA;AAAA,QAAAC,gBAAAA,EAAAA;AAAAA,UAACE;AAAAA,UAAA;AAAA,YACC,WAAWC,GAAK,EAAE,UAAU9E,GAAgB;AAAA,YAC5C,aAAakE;AAAA,YACb,aAAaC;AAAA,YACb,YAAYC;AAAA,YACZ,QAAQC;AAAA,YAER,UAAA;AAAA,cAAAU,gBAAAA,MAACC,IAAA,EACC,UAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAK,UAAAvF,EAAA,CAAS,GACjB;AAAA,cACCQ,2BACEiF,GAAA,EACE,UAAA1D,EAAmB,IAAI,CAACC,MACvBuD,gBAAAA,EAAAA;AAAAA,gBAACG;AAAA,gBAAA;AAAA,kBAEC,IAAI1D,EAAK;AAAA,kBACT,OAAOA,EAAK;AAAA,kBACZ,MAAMA,EAAK;AAAA,kBACX,UAAUrB,MAAiBqB,EAAK;AAAA,kBAChC,YAAY,MAAMpB,EAAgBoB,EAAK,EAAE;AAAA,kBACzC,aAAa,MAAMpB,EAAgB,IAAI;AAAA,gBAAA;AAAA,gBANlCoB,EAAK;AAAA,cAAA,CAQb,GACH;AAAA,eAEAjB,MAAkB,eAAeA,MAAkB,cACnDoE,gBAAAA,OAACM,GAAA,EACC,UAAA;AAAA,gBAAAN,gBAAAA,OAACQ,IAAA,EACC,UAAA;AAAA,kBAAAJ,gBAAAA,EAAAA;AAAAA,oBAACK;AAAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,OAAO,GAAG,MAAM3E,CAAQ;AAAA,sBAAA;AAAA,oBAC1B;AAAA,kBAAA;AAAA,wCAED,QAAA,EAAK,WAAU,SAAS,UAAA,aAAaF,CAAa,MAAA,CAAM;AAAA,gBAAA,GAC3D;AAAA,gBACAwE,gBAAAA,MAACM,IAAA,EAAoB,MAAM,SAAS,SAAQ,QAAO,SAAS5D,EAAA,CAAY;AAAA,cAAA,GAC1E;AAAA,cAEFsD,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU,CAAC1B,MAAMiB,EAAkBjB,GAAG,WAAW;AAAA,kBACjD,KAAKoB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEPM,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU,CAAC1B,MAAMiB,EAAkBjB,GAAG,SAAS;AAAA,kBAC/C,KAAKqB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACP;AAAA,UAAA;AAAA,QAAA;AAAA,QAIFK,gBAAAA,EAAAA;AAAAA,UAACO;AAAA,UAAA;AAAA,YACC,QAAQ3E;AAAA,YACR,OAAOE;AAAA,YACP,UAAUa;AAAA,YACV,UAAUW;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
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 productBaseType: 'review',\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","folderId","productId","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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAMA,KAAmD;AAAA,EACvD,EAAE,IAAI,aAAa,OAAO,oBAAoB,MAAM,sBAAA;AAAA,EACpD,EAAE,IAAI,WAAW,OAAO,kBAAkB,MAAM,SAAA;AAClD,GAEaC,KAAsB,CAAC;AAAA,EAClC,UAAAC,IAAW,CAAA;AAAA,EACX,YAAAC;AAAA,EACA,UAAAC,IAAW,CAAA;AAAA,EACX,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,kBAAAC;AACF,MAAgC;AAC9B,QAAM,EAAE,UAAAC,EAAA,IAAaC,GAAA,GAEf,CAACC,GAAgBC,CAAiB,IAAIC,EAAS,EAAK,GACpD,CAACC,GAAcC,CAAe,IAAIF,EAA4B,IAAI,GAClEG,IAAiBC,EAAO,CAAC,GAGzB,CAACC,GAAeC,CAAgB,IAAIN,EAA4B,IAAI,GACpE,CAACO,GAAUC,CAAW,IAAIR,EAAS,CAAC,GAGpC,CAACS,GAAmBC,CAAoB,IAAIV,EAAS,EAAK,GAC1D,CAACW,GAAcC,CAAe,IAAIZ,EAA0B,IAAI,GAGhEa,IAAerB,EAAS,WAAW,IAAIA,EAAS,CAAC,IAAI,MAErDsB,IAA6BD,GAAc,MAAM,IACjDE,IAA+BF,GAAc,QAAQ,IACrDG,IAAgCH,GAAc,SAAS,IACvDI,IAAgCJ,GAAc,IAC9CK,IAAoB,GAAQL,KAAgBtB,MAAe,mBAG3D,EAAE,kBAAkB4B,EAAA,IAA0BC,GAAqB;AAAA,IACvE,aAAA3B;AAAA,IACA,WAAAwB;AAAA,IACA,QAAAH;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAApB;AAAA,IACA,UAAU,MAAM;AACd,MAAAU,EAAiB,IAAI,GACrBE,EAAY,CAAC;AAAA,IACf;AAAA,IACA,YAAY,CAACD,MAAa;AACxB,MAAAC,EAAYD,CAAQ;AAAA,IACtB;AAAA,EAAA,CACD,GAGKc,IAAqBjC,GAAU,OAAO,CAACkC,MACvCA,EAAK,OAAO,YACPJ,IAEF,EACR,GAEKK,IAAa,MAAM;AACvB,IAAAjB,EAAiB,IAAI,GACrBP,EAAkB,EAAK,GACvBG,EAAgB,IAAI,GACpBC,EAAe,UAAU,GACzBK,EAAY,CAAC,GACbE,EAAqB,EAAK,GAC1BE,EAAgB,IAAI;AAAA,EACtB,GAGMY,IAAqB,OAAOC,MAAwB;AACxD,QAAI,CAACd,KAAgB,CAACE,GAAc;AAClC,MAAAH,EAAqB,EAAK,GAC1BE,EAAgB,IAAI;AACpB;AAAA,IACF;AAEA,UAAMc,IAAgBC,GAAoBF,CAAW;AAErD,QAAI,CAACC,EAAc,QAAQ;AACzB,MAAAE,EAAM;AAAA,QACJ;AAAA,MAAA;AAEF;AAAA,IACF;AAEA,QAAI;AACF,UAAI,CAACb;AACH,cAAM,IAAI,MAAM,2CAA2C;AAE7D,MAAAT,EAAiB,SAAS;AAG1B,YAAMuB,IAAa,MAAMC,GAAoBC,IAAetC,GAAa;AAAA,QACvE,UAAAsB;AAAA,QACA,MAAMW;AAAA,QACN,aAAa;AAAA;AAAA,QACb,iBAAiB;AAAA,MAAA,CAClB;AAGD,MAAAhB,EAAqB,EAAK,GAC1B,MAAMsB,EAAyBrB,GAAckB,EAAW,EAAE,GAC1DjB,EAAgB,IAAI;AAAA,IACtB,SAASqB,GAAY;AACnB,MAAAC,EAAkBD,GAAO,kBAAkB,GAC3CV,EAAA;AAAA,IACF;AAAA,EACF,GAGMY,IAAqB,MAAM;AAC/B,IAAAzB,EAAqB,EAAK,GAC1BE,EAAgB,IAAI,GACpBW,EAAA;AAAA,EACF,GAEM,CAACa,CAAa,IAAIC,GAAA,GAClB,CAACN,EAAa,IAAIO,GAAA,GAElBC,IAAsB,OAAOC,MAAoB;AACrD,QAAI,CAACtB,KAAqB,CAACL;AACzB,aAAAe,EAAM,MAAM,yDAAyD,GAC9DL,EAAA;AAGT,UAAMP,IAAYH,EAAa,SAAS;AACxC,QAAI,CAACG,GAAW;AAEd,MAAAJ,EAAgB4B,CAAK,GACrB9B,EAAqB,EAAI;AACzB;AAAA,IACF;AAGA,UAAMsB,EAAyBQ,GAAOxB,CAAS;AAAA,EACjD,GAGMgB,IAA2B,OAAOQ,GAAiBxB,MAAsB;AAC7E,QAAI;AACF,YAAMyB,IAAcC,GAAqB7B,EAAc,SAAS,aAAa,GAGvE8B,IAAa,MAAMC,GAAoBR,GAAe3C,GAAa;AAAA,QACvE,WAAAuB;AAAAA,QACA,QAAAF;AAAA;AAAA,QACA,SAAS2B;AAAA,MAAA,CACV;AAED,YAAMtB,EAAsBqB,GAAOG,EAAW,EAAE,GAEhDpB,EAAA,GAGA5B,IAAmBgD,EAAW,EAAE;AAAA,IAClC,SAASV,GAAY;AACnB,MAAAC,EAAkBD,GAAO,mBAAmB,GAC5CV,EAAA;AAAA,IACF;AAAA,EACF,GAGMsB,IAA8B,OAAOC,IAAoB,OAAO;AAKpE,QAHA/C,EAAkB,EAAK,GAGnB,CAACP,EAAS;AACZ;AAIF,UAAMuD,KAAe,oBAAI,KAAA,GAAO,YAAA;AAEhC,QAAIC,IAA0B,CAAA;AAG9B,eAAWC,KAAUH,GAAY;AAC/B,YAAMI,IAAgB1D,EAAS,KAAK,CAAC2D,MAAMA,EAAE,OAAOF,EAAO,EAAE;AAC7D,UAAI,CAACC,EAAe;AACA,MAAAD,EAAO;AAC3B,YAAMG,IAAmBH,EAAO,SAAS,CAAA;AAEzC,MAAAD,EAAW,KAAK;AAAA,QACd,IAAIE,EAAc;AAAA,QAClB,aAAaA,EAAc;AAAA,QAC3B,MAAM,EAAE,WAAWH,EAAA;AAAA,QACnB,kBAAAK;AAAA,MAAA,CACD,GAGYF,EAAc;AAAA,IAM7B;AAEA,QAAI;AACF,YAAMG,GAAe,EAAE,YAAAL,GAAY,YAAAzD,GAAY,GAC/CG,KAAcA,EAAWsD,CAAU;AAAA,IACrC,SAASf,GAAO;AACd,cAAQ,MAAM,8BAA8BA,CAAK;AAAA,IACnD;AAAA,EACF,GAEMqB,IAAwB,OAAOC,MAAe;AAClD,QAAI,CAACA,EAAM,QAAOhC,EAAA;AAElB,QAAI;AAEF,UAAI,CAACgC,EAAK,KAAK,SAAS,OAAO;AAC7B,cAAM,IAAI,MAAM,sBAAsB;AAGxC,UAAIC,IAAW,CAAA;AACf,iBAAWP,KAAUzD,GAAU;AAC7B,cAAM,EAAE,IAAAiE,GAAI,YAAAlE,GAAY,aAAAE,MAAgBwD;AAExC,YAAI,CAACxD,EAAa,OAAM,IAAI,MAAM,0BAA0B;AAE5D,cAAMiE,KAAUC,GAAM;AAAA,UACpBlE,KAAe,iBAAiBA,CAAW,IAAIF,CAAU,KAAKkE,CAAE;AAAA,UAChEF;AAAA,UACA;AAAA,YACE,kBAAkB,CAACJ,MAAM;AACvB,cAAA3C,EAAY,KAAK,MAAO,MAAM2C,EAAE,UAAWA,EAAE,SAASI,EAAK,KAAK,CAAC;AAAA,YACnE;AAAA,YACA,SAAS;AAAA,cACP,gBAAgBA,EAAK;AAAA,YAAA;AAAA,UACvB;AAAA,QACF;AAGF,QAAAC,EAAS,KAAKE,EAAO;AAAA,MACvB;AAIA,YAAME,KAFM,MAAM,QAAQ,IAAIJ,CAAQ,GAEV,IAAI,CAACK,GAAKC,OAAO;AAAA,QAC3C,aAAaD,EAAI,KAAK;AAAA,QACtB,IAAIrE,EAASsE,CAAC,EAAE;AAAA,MAAA,EAChB;AAEF,MAAAjB,EAA4Be,CAAe,GAC3CrC,EAAA;AAAA,IACF,SAASU,GAAY;AACnB,cAAQ,MAAMA,CAAK,GACnBL,EAAM,MAAMK,EAAM,OAAO,GACzBV,EAAA;AAAA,IACF;AAAA,EACF,GAEM,CAAC8B,EAAc,IAAIU,GAAA,GAEnBC,KAAkB,CAACb,MAAuB;AAC9C,IAAAA,EAAE,eAAA,GACFhD,EAAe,WACXA,EAAe,YAAY,KAC7BJ,EAAkB,EAAI;AAAA,EAE1B,GAEMkE,KAAkB,CAACd,MAAuB;AAC9C,IAAAA,EAAE,eAAA,GACFhD,EAAe,WACXA,EAAe,YAAY,MAC7BJ,EAAkB,EAAK,GACvBG,EAAgB,IAAI;AAAA,EAExB,GAEMgE,KAAiB,CAACf,MAAuB;AAC7C,IAAAA,EAAE,eAAA;AAAA,EACJ,GAEMgB,KAAa,CAAChB,MAAuB;AAMzC,QALAA,EAAE,eAAA,GACFhD,EAAe,UAAU,GACzBJ,EAAkB,EAAK,GACvBG,EAAgB,IAAI,GAEhB,GAACiD,EAAE,aAAa,SAASA,EAAE,aAAa,MAAM,WAAW,IAI7D;AAAA,UAAIlD,MAAiB,aAAa;AAChC,QAAAK,EAAiB,WAAW;AAC5B,cAAMiD,IAAOJ,EAAE,aAAa,MAAM,CAAC;AAEnC,QAAAG,EAAsBC,CAAI;AAAA,MAC5B;AAEA,UAAItD,MAAiB,WAAW;AAC9B,QAAAK,EAAiB,SAAS;AAC1B,cAAMkC,IAAQW,EAAE,aAAa;AAE7B,QAAAZ,EAAoBC,CAAK;AAAA,MAC3B;AAAA;AAAA,EACF,GAGM4B,IAAoB,OAAOC,GAAsCC,MAAqB;AAC1F,UAAM9B,IAAQ6B,EAAM,OAAO;AAC3B,IAAI,CAAC7B,KAASA,EAAM,WAAW,MAI3B8B,MAAS,cACXhE,EAAiB,SAAS,GAC1BiC,EAAoBC,CAAK,IAEvB8B,MAAS,gBACXhE,EAAiB,WAAW,GAC5BgD,EAAsBd,EAAM,CAAC,CAAC;AAAA,EAElC,GAEM+B,IAAoBnE,EAAyB,IAAI,GACjDoE,IAAmBpE,EAAyB,IAAI;AAEtD,SACEqE,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,UAAAlF;AAAA,MACA,uBAAuBqD;AAAA,MACvB,mBAAA0B;AAAA,MACA,kBAAkBrD,IAAoBsD,IAAmB;AAAA,MAEzD,UAAA;AAAA,QAAAC,gBAAAA,EAAAA;AAAAA,UAACE;AAAAA,UAAA;AAAA,YACC,WAAWC,GAAK,EAAE,UAAU9E,GAAgB;AAAA,YAC5C,aAAakE;AAAA,YACb,aAAaC;AAAA,YACb,YAAYC;AAAA,YACZ,QAAQC;AAAA,YAER,UAAA;AAAA,cAAAU,gBAAAA,MAACC,IAAA,EACC,UAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAK,UAAAvF,EAAA,CAAS,GACjB;AAAA,cACCQ,2BACEiF,GAAA,EACE,UAAA1D,EAAmB,IAAI,CAACC,MACvBuD,gBAAAA,EAAAA;AAAAA,gBAACG;AAAA,gBAAA;AAAA,kBAEC,IAAI1D,EAAK;AAAA,kBACT,OAAOA,EAAK;AAAA,kBACZ,MAAMA,EAAK;AAAA,kBACX,UAAUrB,MAAiBqB,EAAK;AAAA,kBAChC,YAAY,MAAMpB,EAAgBoB,EAAK,EAAE;AAAA,kBACzC,aAAa,MAAMpB,EAAgB,IAAI;AAAA,gBAAA;AAAA,gBANlCoB,EAAK;AAAA,cAAA,CAQb,GACH;AAAA,eAEAjB,MAAkB,eAAeA,MAAkB,cACnDoE,gBAAAA,OAACM,GAAA,EACC,UAAA;AAAA,gBAAAN,gBAAAA,OAACQ,IAAA,EACC,UAAA;AAAA,kBAAAJ,gBAAAA,EAAAA;AAAAA,oBAACK;AAAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,OAAO,GAAG,MAAM3E,CAAQ;AAAA,sBAAA;AAAA,oBAC1B;AAAA,kBAAA;AAAA,wCAED,QAAA,EAAK,WAAU,SAAS,UAAA,aAAaF,CAAa,MAAA,CAAM;AAAA,gBAAA,GAC3D;AAAA,gBACAwE,gBAAAA,MAACM,IAAA,EAAoB,MAAM,SAAS,SAAQ,QAAO,SAAS5D,EAAA,CAAY;AAAA,cAAA,GAC1E;AAAA,cAEFsD,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU,CAAC1B,MAAMiB,EAAkBjB,GAAG,WAAW;AAAA,kBACjD,KAAKoB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEPM,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU,CAAC1B,MAAMiB,EAAkBjB,GAAG,SAAS;AAAA,kBAC/C,KAAKqB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACP;AAAA,UAAA;AAAA,QAAA;AAAA,QAIFK,gBAAAA,EAAAA;AAAAA,UAACO;AAAA,UAAA;AAAA,YACC,QAAQ3E;AAAA,YACR,OAAOE;AAAA,YACP,UAAUa;AAAA,YACV,UAAUW;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("../../../../_virtual/jsx-runtime.cjs.js"),n=require("react"),i=require("./LinksManager.styled.cjs.js"),L=require("@ynput/ayon-react-components");require("../../api/base/client.cjs.js");require("../../api/generated/graphql.cjs.js");require("../../api/generated/graphqlLinks.cjs.js");require("../../api/generated/access.cjs.js");require("../../api/generated/actions.cjs.js");require("../../api/generated/activityFeed.cjs.js");require("../../api/generated/addons.cjs.js");require("../../api/generated/anatomy.cjs.js");require("../../api/generated/attributes.cjs.js");require("../../api/generated/authentication.cjs.js");require("../../api/generated/bundles.cjs.js");require("../../api/generated/configuration.cjs.js");require("../../api/generated/desktop.cjs.js");require("../../api/generated/entityLists.cjs.js");require("../../api/generated/events.cjs.js");require("../../api/generated/files.cjs.js");require("../../api/generated/folders.cjs.js");require("../../api/generated/inbox.cjs.js");require("../../api/generated/links.cjs.js");require("../../api/generated/market.cjs.js");require("../../api/generated/onboarding.cjs.js");require("../../api/generated/operations.cjs.js");require("../../api/generated/products.cjs.js");require("../../api/generated/projectDashboard.cjs.js");require("../../api/generated/projects.cjs.js");require("../../api/generated/projectFolders.cjs.js");require("../../api/generated/reviewables.cjs.js");require("../../api/generated/services.cjs.js");require("../../api/generated/system.cjs.js");require("../../api/generated/tasks.cjs.js");require("../../api/generated/teams.cjs.js");require("../../api/generated/thumbnails.cjs.js");require("../../api/generated/uRIs.cjs.js");require("../../api/generated/users.cjs.js");require("../../api/generated/versions.cjs.js");require("../../api/generated/workfiles.cjs.js");require("../../api/generated/ynputCloud.cjs.js");require("../../api/generated/grouping.cjs.js");require("../../api/generated/views.cjs.js");require("../../api/queries/actions/getActions.cjs.js");require("../../api/queries/activities/getActivities.cjs.js");require("../../api/queries/activities/updateActivities.cjs.js");require("../../api/queries/activities/updateReaction.cjs.js");require("../../api/queries/activities/getMentions.cjs.js");require("../../api/queries/activities/getCategories.cjs.js");require("../../api/queries/addons/getAddons.cjs.js");require("../../api/queries/addons/updateAddons.cjs.js");require("../../api/queries/attributes/getAttributes.cjs.js");require("../../api/queries/attributes/updateAttributes.cjs.js");require("../../api/queries/authentication/getAuthentication.cjs.js");require("../../api/queries/cloud/cloud.cjs.js");require("../../api/queries/config/getConfig.cjs.js");require("../../api/queries/config/updateConfig.cjs.js");require("../../api/queries/entities/getEntity.cjs.js");require("../../api/queries/entities/getEntityPanel.cjs.js");require("../../api/queries/entities/updateEntity.cjs.js");require("../../api/queries/entityLists/getLists.cjs.js");require("../../api/queries/entityLists/updateLists.cjs.js");require("../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../api/queries/entityLists/listFolders.cjs.js");require("../../api/queries/folders/getFolders.cjs.js");require("../../api/queries/grouping/getGrouping.cjs.js");require("../../api/queries/links/updateLinks.cjs.js");const y=require("../../api/queries/links/getLinks.cjs.js");require("../../api/queries/links/getEntityLinks.cjs.js");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/versions/getVersionsProducts.cjs.js");require("../../api/queries/permissions/getPermissions.cjs.js");require("../../api/queries/products/createProduct.cjs.js");require("../../api/queries/project/getProject.cjs.js");require("../../api/queries/project/updateProject.cjs.js");require("../../api/queries/projectFolders/projectFolders.cjs.js");require("../../api/queries/review/getReview.cjs.js");require("../../api/queries/review/updateReview.cjs.js");require("../../api/queries/share/share.cjs.js");require("../../api/queries/system/getSystem.cjs.js");require("../../api/queries/tasks/getTasks.cjs.js");require("../../api/queries/tasks/updateTasks.cjs.js");require("../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../api/queries/users/getUsers.cjs.js");require("../../api/queries/users/updateUsers.cjs.js");require("../../api/queries/users/guests.cjs.js");require("../../api/queries/versions/updateVersions.cjs.js");require("../../api/queries/views/getViews.cjs.js");require("../../api/queries/views/updateViews.cjs.js");require("../../api/queries/watchers/getWatchers.cjs.js");require("../../api/queries/uris/getUris.cjs.js");const A=require("./hooks/useKeyboardNavigation.cjs.js"),v=require("./SearchingLoadingItems.cjs.js");require("../../context/RemoteModulesContext.cjs.js");require("../../context/DetailsPanelContext.cjs.js");require("../../context/SubtasksModulesContext.cjs.js");require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../context/MenuContext.cjs.js");require("../../context/WebsocketContext.cjs.js");require("../../context/GlobalContext.cjs.js");const $=require("../../context/ProjectContext.cjs.js");require("../../context/ProjectFoldersContext.cjs.js");require("../../context/UriContext.cjs.js");const w=require("../EntityIcon/EntityIcon.cjs.js"),B=({projectName:E,targetEntityType:o,onClose:g,onSearchTypeChange:f,onAdd:k})=>{const[s,p]=n.useState(""),c=n.useRef(null),a=$.useProjectContext();a?.folderTypes,a?.taskTypes,a?.productTypes;const{data:t,error:l,isLoading:j,hasNextPage:d,isFetchingNextPage:m,fetchNextPage:S}=y.useGetSearchedEntitiesLinksInfiniteQuery({projectName:E,entityType:o,search:s},{skip:!s}),h=n.useMemo(()=>t?.pages.flatMap(r=>r.entities)||[],[t]),R=r=>{console.log(`Add ${r.name}`),k?.(r.id),p("")},I=()=>{g?.()},{containerRef:C,getItemProps:b}=A({entities:h,onSelect:R,onClose:I,isActive:!!(s&&h.length>0),hasNextPage:d,isFetchingNextPage:m,fetchNextPage:S});return n.useEffect(()=>{const r=setTimeout(()=>{c.current&&c.current.focus()},0);return()=>clearTimeout(r)},[t,s]),e.jsxRuntimeExports.jsxs(i.AddLinksContainer,{children:[e.jsxRuntimeExports.jsx(i.SubHeader,{children:"Add new link"}),e.jsxRuntimeExports.jsxs(i.SearchButtons,{children:[e.jsxRuntimeExports.jsxs(i.Search,{children:[e.jsxRuntimeExports.jsx(L.Icon,{icon:"search",className:"input-search"}),e.jsxRuntimeExports.jsx(i.SearchInput,{ref:c,value:s,onChange:r=>p(r.target.value),placeholder:`Search ${o}s...`,id:`search-${o}`,autoFocus:!0,autoComplete:"off"})]}),!s&&e.jsxRuntimeExports.jsx(i.PickerButton,{label:`Pick ${o}s`,icon:"table_rows",onClick:()=>f("picker")})]}),s&&t&&e.jsxRuntimeExports.jsxs(i.SearchItems,{ref:C,children:[t?.pages.map((r,N)=>r.entities.map((u,P)=>{const T=t.pages.slice(0,N).reduce((x,q)=>x+q.entities.length,0)+P;return e.jsxRuntimeExports.jsxs(i.SearchItem,{onClick:()=>R(u),tabIndex:0,...b(T),children:[e.jsxRuntimeExports.jsx(w.EntityIcon,{entity:u}),e.jsxRuntimeExports.jsxs("span",{className:"label",children:[u.parents?.map((x,q)=>e.jsxRuntimeExports.jsxs(n.Fragment,{children:[e.jsxRuntimeExports.jsx("span",{children:x},q+"-path"),e.jsxRuntimeExports.jsx("span",{children:"/"},q+"-separator")]},q)),e.jsxRuntimeExports.jsx("strong",{children:u.label||u.name})]}),e.jsxRuntimeExports.jsx("span",{className:"type",children:u.subType||u.entityType})]},u.id)})),(j||m||d)&&e.jsxRuntimeExports.jsx(v,{})]}),!j&&l&&e.jsxRuntimeExports.jsx(i.Error,{children:l.message})]})};module.exports=B;
1
+ "use strict";const e=require("../../../../_virtual/jsx-runtime.cjs.js"),n=require("react"),i=require("./LinksManager.styled.cjs.js"),L=require("@ynput/ayon-react-components");require("../../api/base/client.cjs.js");require("../../api/generated/graphql.cjs.js");require("../../api/generated/graphqlLinks.cjs.js");require("../../api/generated/access.cjs.js");require("../../api/generated/actions.cjs.js");require("../../api/generated/activityFeed.cjs.js");require("../../api/generated/addons.cjs.js");require("../../api/generated/anatomy.cjs.js");require("../../api/generated/attributes.cjs.js");require("../../api/generated/authentication.cjs.js");require("../../api/generated/bundles.cjs.js");require("../../api/generated/configuration.cjs.js");require("../../api/generated/desktop.cjs.js");require("../../api/generated/entityLists.cjs.js");require("../../api/generated/events.cjs.js");require("../../api/generated/files.cjs.js");require("../../api/generated/folders.cjs.js");require("../../api/generated/inbox.cjs.js");require("../../api/generated/links.cjs.js");require("../../api/generated/market.cjs.js");require("../../api/generated/onboarding.cjs.js");require("../../api/generated/operations.cjs.js");require("../../api/generated/products.cjs.js");require("../../api/generated/projectDashboard.cjs.js");require("../../api/generated/projects.cjs.js");require("../../api/generated/projectFolders.cjs.js");require("../../api/generated/reviewables.cjs.js");require("../../api/generated/services.cjs.js");require("../../api/generated/system.cjs.js");require("../../api/generated/tasks.cjs.js");require("../../api/generated/teams.cjs.js");require("../../api/generated/thumbnails.cjs.js");require("../../api/generated/uRIs.cjs.js");require("../../api/generated/users.cjs.js");require("../../api/generated/versions.cjs.js");require("../../api/generated/workfiles.cjs.js");require("../../api/generated/ynputCloud.cjs.js");require("../../api/generated/grouping.cjs.js");require("../../api/generated/views.cjs.js");require("../../api/queries/actions/getActions.cjs.js");require("../../api/queries/activities/getActivities.cjs.js");require("../../api/queries/activities/updateActivities.cjs.js");require("../../api/queries/activities/updateReaction.cjs.js");require("../../api/queries/activities/getMentions.cjs.js");require("../../api/queries/activities/getCategories.cjs.js");require("../../api/queries/addons/getAddons.cjs.js");require("../../api/queries/addons/updateAddons.cjs.js");require("../../api/queries/attributes/getAttributes.cjs.js");require("../../api/queries/attributes/updateAttributes.cjs.js");require("../../api/queries/authentication/getAuthentication.cjs.js");require("../../api/queries/cloud/cloud.cjs.js");require("../../api/queries/config/getConfig.cjs.js");require("../../api/queries/config/updateConfig.cjs.js");require("../../api/queries/entities/getEntity.cjs.js");require("../../api/queries/entities/getEntityPanel.cjs.js");require("../../api/queries/entities/updateEntity.cjs.js");require("../../api/queries/entityLists/getLists.cjs.js");require("../../api/queries/entityLists/updateLists.cjs.js");require("../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../api/queries/entityLists/listFolders.cjs.js");require("../../api/queries/folders/getFolders.cjs.js");require("../../api/queries/grouping/getGrouping.cjs.js");require("../../api/queries/links/updateLinks.cjs.js");const y=require("../../api/queries/links/getLinks.cjs.js");require("../../api/queries/links/getEntityLinks.cjs.js");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/versions/getVersionsProducts.cjs.js");require("../../api/queries/permissions/getPermissions.cjs.js");require("../../api/queries/products/createProduct.cjs.js");require("../../api/queries/project/getProject.cjs.js");require("../../api/queries/project/updateProject.cjs.js");require("../../api/queries/projectFolders/projectFolders.cjs.js");require("../../api/queries/review/getReview.cjs.js");require("../../api/queries/review/updateReview.cjs.js");require("../../api/queries/share/share.cjs.js");require("../../api/queries/system/getSystem.cjs.js");require("../../api/queries/tasks/getTasks.cjs.js");require("../../api/queries/tasks/updateTasks.cjs.js");require("../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../api/queries/users/getUsers.cjs.js");require("../../api/queries/users/updateUsers.cjs.js");require("../../api/queries/users/guests.cjs.js");require("../../api/queries/versions/updateVersions.cjs.js");require("../../api/queries/views/getViews.cjs.js");require("../../api/queries/views/updateViews.cjs.js");require("../../api/queries/watchers/getWatchers.cjs.js");require("../../api/queries/uris/getUris.cjs.js");const v=require("./hooks/useKeyboardNavigation.cjs.js"),A=require("./SearchingLoadingItems.cjs.js");require("../../context/RemoteModulesContext.cjs.js");require("../../context/DetailsPanelContext.cjs.js");require("../../context/SubtasksModulesContext.cjs.js");require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../context/MenuContext.cjs.js");require("../../context/WebsocketContext.cjs.js");require("../../context/GlobalContext.cjs.js");const w=require("../../context/ProjectContext.cjs.js");require("../../context/ProjectFoldersContext.cjs.js");require("../../context/UriContext.cjs.js");const B=require("../EntityIcon/EntityIcon.cjs.js"),F=({projectName:E,targetEntityType:o,onClose:g,onSearchTypeChange:f,onAdd:k})=>{const[s,p]=n.useState(""),c=n.useRef(null),a=w.useProjectContext();a?.folderTypes,a?.taskTypes,a?.productTypes;const{data:t,error:l,isLoading:j,hasNextPage:h,isFetchingNextPage:m,fetchNextPage:S}=y.useGetSearchedEntitiesLinksInfiniteQuery({projectName:E,entityType:o,search:s},{skip:!s}),d=n.useMemo(()=>t?.pages.flatMap(r=>r.entities)||[],[t]),R=r=>{k?.(r.id),p("")},I=()=>{g?.()},{containerRef:C,getItemProps:b}=v({entities:d,onSelect:R,onClose:I,isActive:!!(s&&d.length>0),hasNextPage:h,isFetchingNextPage:m,fetchNextPage:S});return n.useEffect(()=>{const r=setTimeout(()=>{c.current&&c.current.focus()},0);return()=>clearTimeout(r)},[t,s]),e.jsxRuntimeExports.jsxs(i.AddLinksContainer,{children:[e.jsxRuntimeExports.jsx(i.SubHeader,{children:"Add new link"}),e.jsxRuntimeExports.jsxs(i.SearchButtons,{children:[e.jsxRuntimeExports.jsxs(i.Search,{children:[e.jsxRuntimeExports.jsx(L.Icon,{icon:"search",className:"input-search"}),e.jsxRuntimeExports.jsx(i.SearchInput,{ref:c,value:s,onChange:r=>p(r.target.value),placeholder:`Search ${o}s...`,id:`search-${o}`,autoFocus:!0,autoComplete:"off"})]}),!s&&e.jsxRuntimeExports.jsx(i.PickerButton,{label:`Pick ${o}s`,icon:"table_rows",onClick:()=>f("picker")})]}),s&&t&&e.jsxRuntimeExports.jsxs(i.SearchItems,{ref:C,children:[t?.pages.map((r,N)=>r.entities.map((u,P)=>{const T=t.pages.slice(0,N).reduce((x,q)=>x+q.entities.length,0)+P;return e.jsxRuntimeExports.jsxs(i.SearchItem,{onClick:()=>R(u),tabIndex:0,...b(T),children:[e.jsxRuntimeExports.jsx(B.EntityIcon,{entity:u}),e.jsxRuntimeExports.jsxs("span",{className:"label",children:[u.parents?.map((x,q)=>e.jsxRuntimeExports.jsxs(n.Fragment,{children:[e.jsxRuntimeExports.jsx("span",{children:x},q+"-path"),e.jsxRuntimeExports.jsx("span",{children:"/"},q+"-separator")]},q)),e.jsxRuntimeExports.jsx("strong",{children:u.label||u.name})]}),e.jsxRuntimeExports.jsx("span",{className:"type",children:u.subType||u.entityType})]},u.id)})),(j||m||h)&&e.jsxRuntimeExports.jsx(A,{})]}),!j&&l&&e.jsxRuntimeExports.jsx(i.Error,{children:l.message})]})};module.exports=F;
2
2
  //# sourceMappingURL=AddNewLinks.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AddNewLinks.cjs.js","sources":["../../../../../src/components/LinksManager/AddNewLinks.tsx"],"sourcesContent":["import { FC, useState, useMemo, useRef, useEffect, Fragment } from 'react'\nimport * as Styled from './LinksManager.styled'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { useGetSearchedEntitiesLinksInfiniteQuery } from '@shared/api'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\nimport SearchingLoadingItems from './SearchingLoadingItems'\nimport { useProjectContext } from '@shared/context'\nimport { EntityIcon } from '@shared/components/EntityIcon/EntityIcon'\n\nexport type LinkSearchType = 'search' | 'picker' | null\n\ninterface AddNewLinksProps {\n targetEntityType: string\n projectName: string\n onClose?: () => void\n onSearchTypeChange: (type: LinkSearchType) => void // used to handle search type changes\n onAdd?: (targetEntityId: string, linkType?: string) => void\n}\n\nconst AddNewLinks: FC<AddNewLinksProps> = ({\n projectName,\n targetEntityType,\n onClose,\n onSearchTypeChange,\n onAdd,\n}) => {\n const [search, setSearch] = useState('')\n const searchInputRef = useRef<HTMLInputElement>(null)\n const project = useProjectContext()\n\n const anatomyForIcons = {\n folderTypes: project?.folderTypes || [],\n taskTypes: project?.taskTypes || [],\n productTypes: project?.productTypes || [],\n }\n\n const {\n data: searchData,\n error,\n isLoading,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useGetSearchedEntitiesLinksInfiniteQuery(\n {\n projectName,\n entityType: targetEntityType,\n search,\n },\n { skip: !search },\n )\n\n // Flatten all entities from all pages\n const entities = useMemo(() => {\n return searchData?.pages.flatMap((page) => page.entities) || []\n }, [searchData])\n\n const handleSelectEntity = (entity: any) => {\n console.log(`Add ${entity.name}`)\n onAdd?.(entity.id)\n // Clear search after adding\n setSearch('')\n }\n\n const handleClose = () => {\n onClose?.()\n }\n\n const { containerRef, getItemProps } = useKeyboardNavigation({\n entities,\n onSelect: handleSelectEntity,\n onClose: handleClose,\n isActive: Boolean(search && entities.length > 0),\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n })\n\n // Force focus the search input on mount and when searchData or search changes\n useEffect(() => {\n // Use setTimeout to ensure focus after render\n const timeout = setTimeout(() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus()\n }\n }, 0)\n return () => clearTimeout(timeout)\n }, [searchData, search])\n\n return (\n <Styled.AddLinksContainer>\n <Styled.SubHeader>Add new link</Styled.SubHeader>\n <Styled.SearchButtons>\n <Styled.Search>\n <Icon icon={'search'} className=\"input-search\" />\n <Styled.SearchInput\n ref={searchInputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={`Search ${targetEntityType}s...`}\n id={`search-${targetEntityType}`}\n autoFocus\n autoComplete=\"off\"\n />\n </Styled.Search>\n\n {!search && (\n <Styled.PickerButton\n label={`Pick ${targetEntityType}s`}\n icon=\"table_rows\"\n onClick={() => onSearchTypeChange('picker')}\n />\n )}\n </Styled.SearchButtons>\n\n {search && searchData && (\n <Styled.SearchItems ref={containerRef}>\n {searchData?.pages.map((page, pageIndex) =>\n page.entities.map((entity, entityIndex) => {\n const flatIndex =\n searchData.pages\n .slice(0, pageIndex)\n .reduce((acc, p) => acc + p.entities.length, 0) + entityIndex\n return (\n <Styled.SearchItem\n key={entity.id}\n onClick={() => handleSelectEntity(entity)}\n tabIndex={0}\n {...getItemProps(flatIndex)}\n >\n <EntityIcon\n entity={entity}\n />\n <span className=\"label\">\n {entity.parents?.map((part, index) => (\n <Fragment key={index}>\n <span key={index + '-path'}>{part}</span>\n <span key={index + '-separator'}>/</span>\n </Fragment>\n ))}\n <strong>{entity.label || entity.name}</strong>\n </span>\n <span className=\"type\">{entity.subType || entity.entityType}</span>\n </Styled.SearchItem>\n )\n }),\n )}\n {(isLoading || isFetchingNextPage || hasNextPage) && <SearchingLoadingItems />}\n </Styled.SearchItems>\n )}\n {!isLoading && error && <Styled.Error>{error.message}</Styled.Error>}\n </Styled.AddLinksContainer>\n )\n}\n\nexport default AddNewLinks\n"],"names":["AddNewLinks","projectName","targetEntityType","onClose","onSearchTypeChange","onAdd","search","setSearch","useState","searchInputRef","useRef","project","useProjectContext","searchData","error","isLoading","hasNextPage","isFetchingNextPage","fetchNextPage","useGetSearchedEntitiesLinksInfiniteQuery","entities","useMemo","page","handleSelectEntity","entity","handleClose","containerRef","getItemProps","useKeyboardNavigation","useEffect","timeout","jsxs","Styled.AddLinksContainer","jsx","Styled.SubHeader","Styled.SearchButtons","Styled.Search","Icon","Styled.SearchInput","e","Styled.PickerButton","Styled.SearchItems","pageIndex","entityIndex","flatIndex","acc","p","Styled.SearchItem","EntityIcon","part","index","Fragment","SearchingLoadingItems","Styled.Error"],"mappings":"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"}
1
+ {"version":3,"file":"AddNewLinks.cjs.js","sources":["../../../../../src/components/LinksManager/AddNewLinks.tsx"],"sourcesContent":["import { FC, useState, useMemo, useRef, useEffect, Fragment } from 'react'\nimport * as Styled from './LinksManager.styled'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { useGetSearchedEntitiesLinksInfiniteQuery } from '@shared/api'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\nimport SearchingLoadingItems from './SearchingLoadingItems'\nimport { useProjectContext } from '@shared/context'\nimport { EntityIcon } from '@shared/components/EntityIcon/EntityIcon'\n\nexport type LinkSearchType = 'search' | 'picker' | null\n\ninterface AddNewLinksProps {\n targetEntityType: string\n projectName: string\n onClose?: () => void\n onSearchTypeChange: (type: LinkSearchType) => void // used to handle search type changes\n onAdd?: (targetEntityId: string, linkType?: string) => void\n}\n\nconst AddNewLinks: FC<AddNewLinksProps> = ({\n projectName,\n targetEntityType,\n onClose,\n onSearchTypeChange,\n onAdd,\n}) => {\n const [search, setSearch] = useState('')\n const searchInputRef = useRef<HTMLInputElement>(null)\n const project = useProjectContext()\n\n const anatomyForIcons = {\n folderTypes: project?.folderTypes || [],\n taskTypes: project?.taskTypes || [],\n productTypes: project?.productTypes || [],\n }\n\n const {\n data: searchData,\n error,\n isLoading,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useGetSearchedEntitiesLinksInfiniteQuery(\n {\n projectName,\n entityType: targetEntityType,\n search,\n },\n { skip: !search },\n )\n\n // Flatten all entities from all pages\n const entities = useMemo(() => {\n return searchData?.pages.flatMap((page) => page.entities) || []\n }, [searchData])\n\n const handleSelectEntity = (entity: any) => {\n onAdd?.(entity.id)\n // Clear search after adding\n setSearch('')\n }\n\n const handleClose = () => {\n onClose?.()\n }\n\n const { containerRef, getItemProps } = useKeyboardNavigation({\n entities,\n onSelect: handleSelectEntity,\n onClose: handleClose,\n isActive: Boolean(search && entities.length > 0),\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n })\n\n // Force focus the search input on mount and when searchData or search changes\n useEffect(() => {\n // Use setTimeout to ensure focus after render\n const timeout = setTimeout(() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus()\n }\n }, 0)\n return () => clearTimeout(timeout)\n }, [searchData, search])\n\n return (\n <Styled.AddLinksContainer>\n <Styled.SubHeader>Add new link</Styled.SubHeader>\n <Styled.SearchButtons>\n <Styled.Search>\n <Icon icon={'search'} className=\"input-search\" />\n <Styled.SearchInput\n ref={searchInputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={`Search ${targetEntityType}s...`}\n id={`search-${targetEntityType}`}\n autoFocus\n autoComplete=\"off\"\n />\n </Styled.Search>\n\n {!search && (\n <Styled.PickerButton\n label={`Pick ${targetEntityType}s`}\n icon=\"table_rows\"\n onClick={() => onSearchTypeChange('picker')}\n />\n )}\n </Styled.SearchButtons>\n\n {search && searchData && (\n <Styled.SearchItems ref={containerRef}>\n {searchData?.pages.map((page, pageIndex) =>\n page.entities.map((entity, entityIndex) => {\n const flatIndex =\n searchData.pages\n .slice(0, pageIndex)\n .reduce((acc, p) => acc + p.entities.length, 0) + entityIndex\n return (\n <Styled.SearchItem\n key={entity.id}\n onClick={() => handleSelectEntity(entity)}\n tabIndex={0}\n {...getItemProps(flatIndex)}\n >\n <EntityIcon\n entity={entity}\n />\n <span className=\"label\">\n {entity.parents?.map((part, index) => (\n <Fragment key={index}>\n <span key={index + '-path'}>{part}</span>\n <span key={index + '-separator'}>/</span>\n </Fragment>\n ))}\n <strong>{entity.label || entity.name}</strong>\n </span>\n <span className=\"type\">{entity.subType || entity.entityType}</span>\n </Styled.SearchItem>\n )\n }),\n )}\n {(isLoading || isFetchingNextPage || hasNextPage) && <SearchingLoadingItems />}\n </Styled.SearchItems>\n )}\n {!isLoading && error && <Styled.Error>{error.message}</Styled.Error>}\n </Styled.AddLinksContainer>\n )\n}\n\nexport default AddNewLinks\n"],"names":["AddNewLinks","projectName","targetEntityType","onClose","onSearchTypeChange","onAdd","search","setSearch","useState","searchInputRef","useRef","project","useProjectContext","searchData","error","isLoading","hasNextPage","isFetchingNextPage","fetchNextPage","useGetSearchedEntitiesLinksInfiniteQuery","entities","useMemo","page","handleSelectEntity","entity","handleClose","containerRef","getItemProps","useKeyboardNavigation","useEffect","timeout","jsxs","Styled.AddLinksContainer","jsx","Styled.SubHeader","Styled.SearchButtons","Styled.Search","Icon","Styled.SearchInput","e","Styled.PickerButton","Styled.SearchItems","pageIndex","entityIndex","flatIndex","acc","p","Styled.SearchItem","EntityIcon","part","index","Fragment","SearchingLoadingItems","Styled.Error"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { j as r } from "../../../../_virtual/jsx-runtime.es.js";
2
- import { useState as L, useRef as v, useMemo as R, useEffect as $, Fragment as w } from "react";
3
- import { AddLinksContainer as B, SubHeader as E, SearchButtons as F, Search as y, SearchInput as M, PickerButton as D, SearchItems as G, SearchItem as H, Error as K } from "./LinksManager.styled.es.js";
2
+ import { useState as v, useRef as A, useMemo as R, useEffect as w, Fragment as y } from "react";
3
+ import { AddLinksContainer as B, SubHeader as E, SearchButtons as F, Search as $, SearchInput as M, PickerButton as D, SearchItems as G, SearchItem as H, Error as K } from "./LinksManager.styled.es.js";
4
4
  import { Icon as Q } from "@ynput/ayon-react-components";
5
5
  import "../../api/base/client.es.js";
6
6
  import "../../api/generated/graphql.es.js";
@@ -119,13 +119,13 @@ const ro = ({
119
119
  onSearchTypeChange: S,
120
120
  onAdd: k
121
121
  }) => {
122
- const [i, c] = L(""), s = v(null), a = J();
122
+ const [i, c] = v(""), s = A(null), a = J();
123
123
  a?.folderTypes, a?.taskTypes, a?.productTypes;
124
124
  const {
125
125
  data: p,
126
126
  error: l,
127
- isLoading: d,
128
- hasNextPage: h,
127
+ isLoading: h,
128
+ hasNextPage: d,
129
129
  isFetchingNextPage: u,
130
130
  fetchNextPage: I
131
131
  } = _(
@@ -136,7 +136,7 @@ const ro = ({
136
136
  },
137
137
  { skip: !i }
138
138
  ), f = R(() => p?.pages.flatMap((t) => t.entities) || [], [p]), x = (t) => {
139
- console.log(`Add ${t.name}`), k?.(t.id), c("");
139
+ k?.(t.id), c("");
140
140
  }, b = () => {
141
141
  g?.();
142
142
  }, { containerRef: C, getItemProps: N } = q({
@@ -144,11 +144,11 @@ const ro = ({
144
144
  onSelect: x,
145
145
  onClose: b,
146
146
  isActive: !!(i && f.length > 0),
147
- hasNextPage: h,
147
+ hasNextPage: d,
148
148
  isFetchingNextPage: u,
149
149
  fetchNextPage: I
150
150
  });
151
- return $(() => {
151
+ return w(() => {
152
152
  const t = setTimeout(() => {
153
153
  s.current && s.current.focus();
154
154
  }, 0);
@@ -156,7 +156,7 @@ const ro = ({
156
156
  }, [p, i]), /* @__PURE__ */ r.jsxs(B, { children: [
157
157
  /* @__PURE__ */ r.jsx(E, { children: "Add new link" }),
158
158
  /* @__PURE__ */ r.jsxs(F, { children: [
159
- /* @__PURE__ */ r.jsxs(y, { children: [
159
+ /* @__PURE__ */ r.jsxs($, { children: [
160
160
  /* @__PURE__ */ r.jsx(Q, { icon: "search", className: "input-search" }),
161
161
  /* @__PURE__ */ r.jsx(
162
162
  M,
@@ -183,13 +183,13 @@ const ro = ({
183
183
  i && p && /* @__PURE__ */ r.jsxs(G, { ref: C, children: [
184
184
  p?.pages.map(
185
185
  (t, T) => t.entities.map((o, P) => {
186
- const A = p.pages.slice(0, T).reduce((n, m) => n + m.entities.length, 0) + P;
186
+ const L = p.pages.slice(0, T).reduce((n, m) => n + m.entities.length, 0) + P;
187
187
  return /* @__PURE__ */ r.jsxs(
188
188
  H,
189
189
  {
190
190
  onClick: () => x(o),
191
191
  tabIndex: 0,
192
- ...N(A),
192
+ ...N(L),
193
193
  children: [
194
194
  /* @__PURE__ */ r.jsx(
195
195
  O,
@@ -198,7 +198,7 @@ const ro = ({
198
198
  }
199
199
  ),
200
200
  /* @__PURE__ */ r.jsxs("span", { className: "label", children: [
201
- o.parents?.map((n, m) => /* @__PURE__ */ r.jsxs(w, { children: [
201
+ o.parents?.map((n, m) => /* @__PURE__ */ r.jsxs(y, { children: [
202
202
  /* @__PURE__ */ r.jsx("span", { children: n }, m + "-path"),
203
203
  /* @__PURE__ */ r.jsx("span", { children: "/" }, m + "-separator")
204
204
  ] }, m)),
@@ -211,9 +211,9 @@ const ro = ({
211
211
  );
212
212
  })
213
213
  ),
214
- (d || u || h) && /* @__PURE__ */ r.jsx(z, {})
214
+ (h || u || d) && /* @__PURE__ */ r.jsx(z, {})
215
215
  ] }),
216
- !d && l && /* @__PURE__ */ r.jsx(K, { children: l.message })
216
+ !h && l && /* @__PURE__ */ r.jsx(K, { children: l.message })
217
217
  ] });
218
218
  };
219
219
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"AddNewLinks.es.js","sources":["../../../../../src/components/LinksManager/AddNewLinks.tsx"],"sourcesContent":["import { FC, useState, useMemo, useRef, useEffect, Fragment } from 'react'\nimport * as Styled from './LinksManager.styled'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { useGetSearchedEntitiesLinksInfiniteQuery } from '@shared/api'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\nimport SearchingLoadingItems from './SearchingLoadingItems'\nimport { useProjectContext } from '@shared/context'\nimport { EntityIcon } from '@shared/components/EntityIcon/EntityIcon'\n\nexport type LinkSearchType = 'search' | 'picker' | null\n\ninterface AddNewLinksProps {\n targetEntityType: string\n projectName: string\n onClose?: () => void\n onSearchTypeChange: (type: LinkSearchType) => void // used to handle search type changes\n onAdd?: (targetEntityId: string, linkType?: string) => void\n}\n\nconst AddNewLinks: FC<AddNewLinksProps> = ({\n projectName,\n targetEntityType,\n onClose,\n onSearchTypeChange,\n onAdd,\n}) => {\n const [search, setSearch] = useState('')\n const searchInputRef = useRef<HTMLInputElement>(null)\n const project = useProjectContext()\n\n const anatomyForIcons = {\n folderTypes: project?.folderTypes || [],\n taskTypes: project?.taskTypes || [],\n productTypes: project?.productTypes || [],\n }\n\n const {\n data: searchData,\n error,\n isLoading,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useGetSearchedEntitiesLinksInfiniteQuery(\n {\n projectName,\n entityType: targetEntityType,\n search,\n },\n { skip: !search },\n )\n\n // Flatten all entities from all pages\n const entities = useMemo(() => {\n return searchData?.pages.flatMap((page) => page.entities) || []\n }, [searchData])\n\n const handleSelectEntity = (entity: any) => {\n console.log(`Add ${entity.name}`)\n onAdd?.(entity.id)\n // Clear search after adding\n setSearch('')\n }\n\n const handleClose = () => {\n onClose?.()\n }\n\n const { containerRef, getItemProps } = useKeyboardNavigation({\n entities,\n onSelect: handleSelectEntity,\n onClose: handleClose,\n isActive: Boolean(search && entities.length > 0),\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n })\n\n // Force focus the search input on mount and when searchData or search changes\n useEffect(() => {\n // Use setTimeout to ensure focus after render\n const timeout = setTimeout(() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus()\n }\n }, 0)\n return () => clearTimeout(timeout)\n }, [searchData, search])\n\n return (\n <Styled.AddLinksContainer>\n <Styled.SubHeader>Add new link</Styled.SubHeader>\n <Styled.SearchButtons>\n <Styled.Search>\n <Icon icon={'search'} className=\"input-search\" />\n <Styled.SearchInput\n ref={searchInputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={`Search ${targetEntityType}s...`}\n id={`search-${targetEntityType}`}\n autoFocus\n autoComplete=\"off\"\n />\n </Styled.Search>\n\n {!search && (\n <Styled.PickerButton\n label={`Pick ${targetEntityType}s`}\n icon=\"table_rows\"\n onClick={() => onSearchTypeChange('picker')}\n />\n )}\n </Styled.SearchButtons>\n\n {search && searchData && (\n <Styled.SearchItems ref={containerRef}>\n {searchData?.pages.map((page, pageIndex) =>\n page.entities.map((entity, entityIndex) => {\n const flatIndex =\n searchData.pages\n .slice(0, pageIndex)\n .reduce((acc, p) => acc + p.entities.length, 0) + entityIndex\n return (\n <Styled.SearchItem\n key={entity.id}\n onClick={() => handleSelectEntity(entity)}\n tabIndex={0}\n {...getItemProps(flatIndex)}\n >\n <EntityIcon\n entity={entity}\n />\n <span className=\"label\">\n {entity.parents?.map((part, index) => (\n <Fragment key={index}>\n <span key={index + '-path'}>{part}</span>\n <span key={index + '-separator'}>/</span>\n </Fragment>\n ))}\n <strong>{entity.label || entity.name}</strong>\n </span>\n <span className=\"type\">{entity.subType || entity.entityType}</span>\n </Styled.SearchItem>\n )\n }),\n )}\n {(isLoading || isFetchingNextPage || hasNextPage) && <SearchingLoadingItems />}\n </Styled.SearchItems>\n )}\n {!isLoading && error && <Styled.Error>{error.message}</Styled.Error>}\n </Styled.AddLinksContainer>\n )\n}\n\nexport default AddNewLinks\n"],"names":["AddNewLinks","projectName","targetEntityType","onClose","onSearchTypeChange","onAdd","search","setSearch","useState","searchInputRef","useRef","project","useProjectContext","searchData","error","isLoading","hasNextPage","isFetchingNextPage","fetchNextPage","useGetSearchedEntitiesLinksInfiniteQuery","entities","useMemo","page","handleSelectEntity","entity","handleClose","containerRef","getItemProps","useKeyboardNavigation","useEffect","timeout","jsxs","Styled.AddLinksContainer","jsx","Styled.SubHeader","Styled.SearchButtons","Styled.Search","Icon","Styled.SearchInput","e","Styled.PickerButton","Styled.SearchItems","pageIndex","entityIndex","flatIndex","acc","p","Styled.SearchItem","EntityIcon","part","index","Fragment","SearchingLoadingItems","Styled.Error"],"mappings":"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"}
1
+ {"version":3,"file":"AddNewLinks.es.js","sources":["../../../../../src/components/LinksManager/AddNewLinks.tsx"],"sourcesContent":["import { FC, useState, useMemo, useRef, useEffect, Fragment } from 'react'\nimport * as Styled from './LinksManager.styled'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { useGetSearchedEntitiesLinksInfiniteQuery } from '@shared/api'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\nimport SearchingLoadingItems from './SearchingLoadingItems'\nimport { useProjectContext } from '@shared/context'\nimport { EntityIcon } from '@shared/components/EntityIcon/EntityIcon'\n\nexport type LinkSearchType = 'search' | 'picker' | null\n\ninterface AddNewLinksProps {\n targetEntityType: string\n projectName: string\n onClose?: () => void\n onSearchTypeChange: (type: LinkSearchType) => void // used to handle search type changes\n onAdd?: (targetEntityId: string, linkType?: string) => void\n}\n\nconst AddNewLinks: FC<AddNewLinksProps> = ({\n projectName,\n targetEntityType,\n onClose,\n onSearchTypeChange,\n onAdd,\n}) => {\n const [search, setSearch] = useState('')\n const searchInputRef = useRef<HTMLInputElement>(null)\n const project = useProjectContext()\n\n const anatomyForIcons = {\n folderTypes: project?.folderTypes || [],\n taskTypes: project?.taskTypes || [],\n productTypes: project?.productTypes || [],\n }\n\n const {\n data: searchData,\n error,\n isLoading,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useGetSearchedEntitiesLinksInfiniteQuery(\n {\n projectName,\n entityType: targetEntityType,\n search,\n },\n { skip: !search },\n )\n\n // Flatten all entities from all pages\n const entities = useMemo(() => {\n return searchData?.pages.flatMap((page) => page.entities) || []\n }, [searchData])\n\n const handleSelectEntity = (entity: any) => {\n onAdd?.(entity.id)\n // Clear search after adding\n setSearch('')\n }\n\n const handleClose = () => {\n onClose?.()\n }\n\n const { containerRef, getItemProps } = useKeyboardNavigation({\n entities,\n onSelect: handleSelectEntity,\n onClose: handleClose,\n isActive: Boolean(search && entities.length > 0),\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n })\n\n // Force focus the search input on mount and when searchData or search changes\n useEffect(() => {\n // Use setTimeout to ensure focus after render\n const timeout = setTimeout(() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus()\n }\n }, 0)\n return () => clearTimeout(timeout)\n }, [searchData, search])\n\n return (\n <Styled.AddLinksContainer>\n <Styled.SubHeader>Add new link</Styled.SubHeader>\n <Styled.SearchButtons>\n <Styled.Search>\n <Icon icon={'search'} className=\"input-search\" />\n <Styled.SearchInput\n ref={searchInputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={`Search ${targetEntityType}s...`}\n id={`search-${targetEntityType}`}\n autoFocus\n autoComplete=\"off\"\n />\n </Styled.Search>\n\n {!search && (\n <Styled.PickerButton\n label={`Pick ${targetEntityType}s`}\n icon=\"table_rows\"\n onClick={() => onSearchTypeChange('picker')}\n />\n )}\n </Styled.SearchButtons>\n\n {search && searchData && (\n <Styled.SearchItems ref={containerRef}>\n {searchData?.pages.map((page, pageIndex) =>\n page.entities.map((entity, entityIndex) => {\n const flatIndex =\n searchData.pages\n .slice(0, pageIndex)\n .reduce((acc, p) => acc + p.entities.length, 0) + entityIndex\n return (\n <Styled.SearchItem\n key={entity.id}\n onClick={() => handleSelectEntity(entity)}\n tabIndex={0}\n {...getItemProps(flatIndex)}\n >\n <EntityIcon\n entity={entity}\n />\n <span className=\"label\">\n {entity.parents?.map((part, index) => (\n <Fragment key={index}>\n <span key={index + '-path'}>{part}</span>\n <span key={index + '-separator'}>/</span>\n </Fragment>\n ))}\n <strong>{entity.label || entity.name}</strong>\n </span>\n <span className=\"type\">{entity.subType || entity.entityType}</span>\n </Styled.SearchItem>\n )\n }),\n )}\n {(isLoading || isFetchingNextPage || hasNextPage) && <SearchingLoadingItems />}\n </Styled.SearchItems>\n )}\n {!isLoading && error && <Styled.Error>{error.message}</Styled.Error>}\n </Styled.AddLinksContainer>\n )\n}\n\nexport default AddNewLinks\n"],"names":["AddNewLinks","projectName","targetEntityType","onClose","onSearchTypeChange","onAdd","search","setSearch","useState","searchInputRef","useRef","project","useProjectContext","searchData","error","isLoading","hasNextPage","isFetchingNextPage","fetchNextPage","useGetSearchedEntitiesLinksInfiniteQuery","entities","useMemo","page","handleSelectEntity","entity","handleClose","containerRef","getItemProps","useKeyboardNavigation","useEffect","timeout","jsxs","Styled.AddLinksContainer","jsx","Styled.SubHeader","Styled.SearchButtons","Styled.Search","Icon","Styled.SearchInput","e","Styled.PickerButton","Styled.SearchItems","pageIndex","entityIndex","flatIndex","acc","p","Styled.SearchItem","EntityIcon","part","index","Fragment","SearchingLoadingItems","Styled.Error"],"mappings":"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"}
@@ -4,5 +4,5 @@
4
4
  overflow: hidden;
5
5
  display: flex;
6
6
  flex-direction: column;
7
- `,I=({isEditing:d,anchorId:A,containerClassName:T="table-container",onClose:u,children:H})=>{const h=i.useRef(null),[c,w]=i.useState(null),[x,v]=i.useState(void 0),[b,y]=i.useState(void 0),o=document.getElementById(A),r=o?.closest(`.${T}`),L=()=>{if(!d)return;if(!o||!r){w({top:window.innerHeight/2,left:window.innerWidth/2,showAbove:!1}),v(void 0),y(void 0);return}const e=o.getBoundingClientRect(),n=r.getBoundingClientRect(),t=n.right,W=window.innerWidth-n.right,s=24,k=250,a=400,P=600,R=window.innerWidth,D=window.innerHeight,E=t-e.left;let l={},g=a;E<a?e.right-s>=a?l.right=Math.max(R-e.right,s+W):(l.left=s,g=R-2*s):(l.left=e.left,g=Math.max(a,E)),v(g);const f=D-e.bottom-s,S=e.top-s;let p,O=!1,m;f<k&&S>f?(O=!0,p=e.top-4,m=S-4):(p=e.bottom+4,m=f-4),y(Math.min(Math.max(200,m),P)),w({top:p,...l,showAbove:O})};i.useLayoutEffect(()=>{L()},[d,o]),i.useLayoutEffect(()=>{if(r){const e=new ResizeObserver(()=>{L()});return e.observe(r),()=>e.disconnect()}},[r,o]),i.useLayoutEffect(()=>{const e=n=>{const t=n.target;h.current&&!h.current.contains(t)&&o&&!o.contains(t)&&!t.closest(".entity-picker-dialog")&&!t.querySelector(".entity-picker-dialog")&&!t.closest("dialog")&&!t.closest(".dropdown")&&!t.closest(".p-dialog-mask")&&!t.closest(".p-datepicker")&&!t.closest("."+C)&&u?.()};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[u,o]);const M=e=>{const n=e.target;n.tagName==="INPUT"||n.tagName==="TEXTAREA"||n.isContentEditable||e.key==="Escape"&&(e.stopPropagation(),u?.())};return d?q.createPortal(B.jsxRuntimeExports.jsx(j,{ref:h,style:{top:c?.top,left:c?.left,right:c?.right,...c?.showAbove&&{transform:"translateY(-100%)"},visibility:c?"visible":"hidden",maxWidth:x?`${x}px`:"none",maxHeight:b?`${b}px`:"none"},className:"links-widget-popup",onKeyDown:M,children:H}),document.body):null};exports.BLOCK_DIALOG_CLOSE_CLASS=C;exports.CellEditingDialog=I;
7
+ `,I=({isEditing:d,anchorId:T,containerClassName:A="table-container",onClose:u,children:H})=>{const h=i.useRef(null),[c,v]=i.useState(null),[w,x]=i.useState(void 0),[b,y]=i.useState(void 0),o=document.getElementById(T),r=o?.closest(`.${A}`),E=()=>{if(!d)return;if(!o||!r){v({top:window.innerHeight/2,left:window.innerWidth/2,showAbove:!1}),x(void 0),y(void 0);return}const e=o.getBoundingClientRect(),n=r.getBoundingClientRect(),t=n.right,W=window.innerWidth-n.right,s=24,k=250,a=400,P=600,L=window.innerWidth,D=window.innerHeight,R=t-e.left;let l={},g=a;R<a?e.right-s>=a?l.right=Math.max(L-e.right,s+W):(l.left=s,g=L-2*s):(l.left=e.left,g=Math.max(a,R)),x(g);const f=D-e.bottom-s,S=e.top-s;let p,O=!1,m;f<k&&S>f?(O=!0,p=e.top-4,m=S-4):(p=e.bottom+4,m=f-4),y(Math.min(Math.max(200,m),P)),v({top:p,...l,showAbove:O})};i.useLayoutEffect(()=>{E()},[d,o]),i.useLayoutEffect(()=>{if(r){const e=new ResizeObserver(()=>{E()});return e.observe(r),()=>e.disconnect()}},[r,o]),i.useLayoutEffect(()=>{const e=n=>{const t=n.target;h.current&&!h.current.contains(t)&&o&&!o.contains(t)&&!t.closest(".entity-picker-dialog")&&!t.querySelector(".entity-picker-dialog")&&!t.closest("dialog")&&!t.closest(".dropdown")&&!t.closest(".p-dialog-mask")&&!t.closest(".p-datepicker")&&!t.closest("."+C)&&(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),u?.())};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[u,o]);const M=e=>{const n=e.target;n.tagName==="INPUT"||n.tagName==="TEXTAREA"||n.isContentEditable||e.key==="Escape"&&(e.stopPropagation(),u?.())};return d?q.createPortal(B.jsxRuntimeExports.jsx(j,{ref:h,style:{top:c?.top,left:c?.left,right:c?.right,...c?.showAbove&&{transform:"translateY(-100%)"},visibility:c?"visible":"hidden",maxWidth:w?`${w}px`:"none",maxHeight:b?`${b}px`:"none"},className:"links-widget-popup",onKeyDown:M,children:H}),document.body):null};exports.BLOCK_DIALOG_CLOSE_CLASS=C;exports.CellEditingDialog=I;
8
8
  //# sourceMappingURL=CellEditingDialog.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CellEditingDialog.cjs.js","sources":["../../../../../src/components/LinksManager/CellEditingDialog.tsx"],"sourcesContent":["import { FC, useRef, useLayoutEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { createPortal } from 'react-dom'\n\nexport const BLOCK_DIALOG_CLOSE_CLASS = 'block-dialog-close'\n\nconst StyledPopUp = styled.div`\n position: fixed;\n z-index: 310;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n`\n\ntype Position = {\n top: number\n left?: number\n right?: number\n showAbove?: boolean\n}\n\nexport interface LinksManagerDialogProps {\n isEditing: boolean\n anchorId: string\n containerClassName?: string\n onClose?: () => void\n children?: React.ReactNode\n}\n\nexport const CellEditingDialog: FC<LinksManagerDialogProps> = ({\n isEditing,\n anchorId,\n containerClassName = 'table-container',\n onClose,\n children,\n}) => {\n const popupRef = useRef<HTMLDivElement>(null)\n\n const [position, setPosition] = useState<Position | null>(null)\n const [maxWidth, setMaxWidth] = useState<number | undefined>(undefined)\n const [maxHeight, setMaxHeight] = useState<number | undefined>(undefined)\n\n // get the cell element based on the cellId\n const anchorElement = document.getElementById(anchorId)\n const tableContainer = anchorElement?.closest(`.${containerClassName}`)\n\n const updatePosition = () => {\n if (!isEditing) return\n\n if (!anchorElement || !tableContainer) {\n // if the anchor element is not found, position in the center of the screen\n setPosition({\n top: window.innerHeight / 2,\n left: window.innerWidth / 2,\n showAbove: false,\n })\n setMaxWidth(undefined)\n setMaxHeight(undefined)\n return\n }\n\n const cellRect = anchorElement.getBoundingClientRect()\n\n const containerRect = tableContainer.getBoundingClientRect()\n const containerRight = containerRect.right\n const containerToRightOfScreen = window.innerWidth - containerRect.right\n\n const screenPadding = 24\n const minHeightThreshold = 250\n const minWidthThreshold = 400\n const maxMaxHeight = 600\n const screenWidth = window.innerWidth\n const screenHeight = window.innerHeight\n\n // Check if we have enough space to the right of the cell\n const spaceToRight = containerRight - cellRect.left\n let position: { left?: number; right?: number } = {}\n let dialogWidth = minWidthThreshold\n\n if (spaceToRight < minWidthThreshold) {\n // Not enough space to the right, anchor to the right side of the cell\n const spaceToLeft = cellRect.right - screenPadding\n if (spaceToLeft >= minWidthThreshold) {\n // Anchor to the right side of the cell\n position.right = Math.max(\n screenWidth - cellRect.right,\n screenPadding + containerToRightOfScreen,\n )\n } else {\n // Not enough space on either side, center and use available width\n position.left = screenPadding\n dialogWidth = screenWidth - 2 * screenPadding\n }\n } else {\n // Enough space to the right, position normally\n position.left = cellRect.left\n dialogWidth = Math.max(minWidthThreshold, spaceToRight)\n }\n\n setMaxWidth(dialogWidth)\n\n const spaceBelow = screenHeight - cellRect.bottom - screenPadding\n const spaceAbove = cellRect.top - screenPadding\n let top: number\n let showAbove = false\n let availableHeight: number\n\n if (spaceBelow < minHeightThreshold && spaceAbove > spaceBelow) {\n showAbove = true\n top = cellRect.top - 4\n availableHeight = spaceAbove - 4\n } else {\n top = cellRect.bottom + 4\n availableHeight = spaceBelow - 4\n }\n\n // Set max height to prevent dialog from going off screen\n setMaxHeight(Math.min(Math.max(200, availableHeight), maxMaxHeight)) // Minimum 200px height\n\n setPosition({\n top,\n ...position,\n showAbove,\n })\n }\n\n useLayoutEffect(() => {\n updatePosition()\n }, [isEditing, anchorElement])\n\n // watch for when the tableContainer width changes\n useLayoutEffect(() => {\n if (tableContainer) {\n const resizeObserver = new ResizeObserver(() => {\n updatePosition()\n })\n resizeObserver.observe(tableContainer)\n return () => resizeObserver.disconnect()\n }\n }, [tableContainer, anchorElement])\n\n // close the dialog when clicking outside of it\n useLayoutEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement\n\n if (\n popupRef.current &&\n !popupRef.current.contains(target) &&\n anchorElement &&\n !anchorElement.contains(target) &&\n // check we are not clicking inside the EntityPickerDialog\n !target.closest('.entity-picker-dialog') &&\n // check we are not clicking on the dialog backdrop\n !target.querySelector('.entity-picker-dialog') &&\n // check we are not clicking inside another dialog\n !target.closest('dialog') &&\n // check we are not clicking inside a dropdown\n !target.closest('.dropdown') &&\n !target.closest('.p-dialog-mask') &&\n !target.closest('.p-datepicker') &&\n !target.closest('.' + BLOCK_DIALOG_CLOSE_CLASS)\n ) {\n onClose?.()\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [onClose, anchorElement])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n // check we are not inside an input or textarea\n const target = e.target as HTMLElement\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return\n }\n\n // close dialog on escape\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose?.()\n }\n }\n\n if (!isEditing) return null\n return createPortal(\n <StyledPopUp\n ref={popupRef}\n style={{\n top: position?.top,\n left: position?.left,\n right: position?.right,\n ...(position?.showAbove && { transform: 'translateY(-100%)' }),\n visibility: position ? 'visible' : 'hidden',\n maxWidth: maxWidth ? `${maxWidth}px` : 'none',\n maxHeight: maxHeight ? `${maxHeight}px` : 'none',\n }}\n className=\"links-widget-popup\"\n onKeyDown={handleKeyDown}\n >\n {children}\n </StyledPopUp>,\n document.body,\n )\n}\n"],"names":["BLOCK_DIALOG_CLOSE_CLASS","StyledPopUp","styled","CellEditingDialog","isEditing","anchorId","containerClassName","onClose","children","popupRef","useRef","position","setPosition","useState","maxWidth","setMaxWidth","maxHeight","setMaxHeight","anchorElement","tableContainer","updatePosition","cellRect","containerRect","containerRight","containerToRightOfScreen","screenPadding","minHeightThreshold","minWidthThreshold","maxMaxHeight","screenWidth","screenHeight","spaceToRight","dialogWidth","spaceBelow","spaceAbove","top","showAbove","availableHeight","useLayoutEffect","resizeObserver","handleClickOutside","event","target","handleKeyDown","createPortal","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"CellEditingDialog.cjs.js","sources":["../../../../../src/components/LinksManager/CellEditingDialog.tsx"],"sourcesContent":["import { FC, useRef, useLayoutEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { createPortal } from 'react-dom'\n\nexport const BLOCK_DIALOG_CLOSE_CLASS = 'block-dialog-close'\n\nconst StyledPopUp = styled.div`\n position: fixed;\n z-index: 310;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n`\n\ntype Position = {\n top: number\n left?: number\n right?: number\n showAbove?: boolean\n}\n\nexport interface LinksManagerDialogProps {\n isEditing: boolean\n anchorId: string\n containerClassName?: string\n onClose?: () => void\n children?: React.ReactNode\n}\n\nexport const CellEditingDialog: FC<LinksManagerDialogProps> = ({\n isEditing,\n anchorId,\n containerClassName = 'table-container',\n onClose,\n children,\n}) => {\n const popupRef = useRef<HTMLDivElement>(null)\n\n const [position, setPosition] = useState<Position | null>(null)\n const [maxWidth, setMaxWidth] = useState<number | undefined>(undefined)\n const [maxHeight, setMaxHeight] = useState<number | undefined>(undefined)\n\n // get the cell element based on the cellId\n const anchorElement = document.getElementById(anchorId)\n const tableContainer = anchorElement?.closest(`.${containerClassName}`)\n\n const updatePosition = () => {\n if (!isEditing) return\n\n if (!anchorElement || !tableContainer) {\n // if the anchor element is not found, position in the center of the screen\n setPosition({\n top: window.innerHeight / 2,\n left: window.innerWidth / 2,\n showAbove: false,\n })\n setMaxWidth(undefined)\n setMaxHeight(undefined)\n return\n }\n\n const cellRect = anchorElement.getBoundingClientRect()\n\n const containerRect = tableContainer.getBoundingClientRect()\n const containerRight = containerRect.right\n const containerToRightOfScreen = window.innerWidth - containerRect.right\n\n const screenPadding = 24\n const minHeightThreshold = 250\n const minWidthThreshold = 400\n const maxMaxHeight = 600\n const screenWidth = window.innerWidth\n const screenHeight = window.innerHeight\n\n // Check if we have enough space to the right of the cell\n const spaceToRight = containerRight - cellRect.left\n let position: { left?: number; right?: number } = {}\n let dialogWidth = minWidthThreshold\n\n if (spaceToRight < minWidthThreshold) {\n // Not enough space to the right, anchor to the right side of the cell\n const spaceToLeft = cellRect.right - screenPadding\n if (spaceToLeft >= minWidthThreshold) {\n // Anchor to the right side of the cell\n position.right = Math.max(\n screenWidth - cellRect.right,\n screenPadding + containerToRightOfScreen,\n )\n } else {\n // Not enough space on either side, center and use available width\n position.left = screenPadding\n dialogWidth = screenWidth - 2 * screenPadding\n }\n } else {\n // Enough space to the right, position normally\n position.left = cellRect.left\n dialogWidth = Math.max(minWidthThreshold, spaceToRight)\n }\n\n setMaxWidth(dialogWidth)\n\n const spaceBelow = screenHeight - cellRect.bottom - screenPadding\n const spaceAbove = cellRect.top - screenPadding\n let top: number\n let showAbove = false\n let availableHeight: number\n\n if (spaceBelow < minHeightThreshold && spaceAbove > spaceBelow) {\n showAbove = true\n top = cellRect.top - 4\n availableHeight = spaceAbove - 4\n } else {\n top = cellRect.bottom + 4\n availableHeight = spaceBelow - 4\n }\n\n // Set max height to prevent dialog from going off screen\n setMaxHeight(Math.min(Math.max(200, availableHeight), maxMaxHeight)) // Minimum 200px height\n\n setPosition({\n top,\n ...position,\n showAbove,\n })\n }\n\n useLayoutEffect(() => {\n updatePosition()\n }, [isEditing, anchorElement])\n\n // watch for when the tableContainer width changes\n useLayoutEffect(() => {\n if (tableContainer) {\n const resizeObserver = new ResizeObserver(() => {\n updatePosition()\n })\n resizeObserver.observe(tableContainer)\n return () => resizeObserver.disconnect()\n }\n }, [tableContainer, anchorElement])\n\n // close the dialog when clicking outside of it\n useLayoutEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement\n\n if (\n popupRef.current &&\n !popupRef.current.contains(target) &&\n anchorElement &&\n !anchorElement.contains(target) &&\n // check we are not clicking inside the EntityPickerDialog\n !target.closest('.entity-picker-dialog') &&\n // check we are not clicking on the dialog backdrop\n !target.querySelector('.entity-picker-dialog') &&\n // check we are not clicking inside another dialog\n !target.closest('dialog') &&\n // check we are not clicking inside a dropdown\n !target.closest('.dropdown') &&\n !target.closest('.p-dialog-mask') &&\n !target.closest('.p-datepicker') &&\n !target.closest('.' + BLOCK_DIALOG_CLOSE_CLASS)\n ) {\n // Blur active element first so inputs can commit their values before unmount\n if (document.activeElement instanceof HTMLElement) {\n document.activeElement.blur()\n }\n onClose?.()\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [onClose, anchorElement])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n // check we are not inside an input or textarea\n const target = e.target as HTMLElement\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return\n }\n\n // close dialog on escape\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose?.()\n }\n }\n\n if (!isEditing) return null\n return createPortal(\n <StyledPopUp\n ref={popupRef}\n style={{\n top: position?.top,\n left: position?.left,\n right: position?.right,\n ...(position?.showAbove && { transform: 'translateY(-100%)' }),\n visibility: position ? 'visible' : 'hidden',\n maxWidth: maxWidth ? `${maxWidth}px` : 'none',\n maxHeight: maxHeight ? `${maxHeight}px` : 'none',\n }}\n className=\"links-widget-popup\"\n onKeyDown={handleKeyDown}\n >\n {children}\n </StyledPopUp>,\n document.body,\n )\n}\n"],"names":["BLOCK_DIALOG_CLOSE_CLASS","StyledPopUp","styled","CellEditingDialog","isEditing","anchorId","containerClassName","onClose","children","popupRef","useRef","position","setPosition","useState","maxWidth","setMaxWidth","maxHeight","setMaxHeight","anchorElement","tableContainer","updatePosition","cellRect","containerRect","containerRight","containerToRightOfScreen","screenPadding","minHeightThreshold","minWidthThreshold","maxMaxHeight","screenWidth","screenHeight","spaceToRight","dialogWidth","spaceBelow","spaceAbove","top","showAbove","availableHeight","useLayoutEffect","resizeObserver","handleClickOutside","event","target","handleKeyDown","createPortal","jsx"],"mappings":"oNAIaA,EAA2B,qBAElCC,EAAcC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBdC,EAAiD,CAAC,CAC7D,UAAAC,EACA,SAAAC,EACA,mBAAAC,EAAqB,kBACrB,QAAAC,EACA,SAAAC,CACF,IAAM,CACJ,MAAMC,EAAWC,EAAAA,OAAuB,IAAI,EAEtC,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAA0B,IAAI,EACxD,CAACC,EAAUC,CAAW,EAAIF,EAAAA,SAA6B,MAAS,EAChE,CAACG,EAAWC,CAAY,EAAIJ,EAAAA,SAA6B,MAAS,EAGlEK,EAAgB,SAAS,eAAeb,CAAQ,EAChDc,EAAiBD,GAAe,QAAQ,IAAIZ,CAAkB,EAAE,EAEhEc,EAAiB,IAAM,CAC3B,GAAI,CAAChB,EAAW,OAEhB,GAAI,CAACc,GAAiB,CAACC,EAAgB,CAErCP,EAAY,CACV,IAAK,OAAO,YAAc,EAC1B,KAAM,OAAO,WAAa,EAC1B,UAAW,EAAA,CACZ,EACDG,EAAY,MAAS,EACrBE,EAAa,MAAS,EACtB,MACF,CAEA,MAAMI,EAAWH,EAAc,sBAAA,EAEzBI,EAAgBH,EAAe,sBAAA,EAC/BI,EAAiBD,EAAc,MAC/BE,EAA2B,OAAO,WAAaF,EAAc,MAE7DG,EAAgB,GAChBC,EAAqB,IACrBC,EAAoB,IACpBC,EAAe,IACfC,EAAc,OAAO,WACrBC,EAAe,OAAO,YAGtBC,EAAeR,EAAiBF,EAAS,KAC/C,IAAIV,EAA8C,CAAA,EAC9CqB,EAAcL,EAEdI,EAAeJ,EAEGN,EAAS,MAAQI,GAClBE,EAEjBhB,EAAS,MAAQ,KAAK,IACpBkB,EAAcR,EAAS,MACvBI,EAAgBD,CAAA,GAIlBb,EAAS,KAAOc,EAChBO,EAAcH,EAAc,EAAIJ,IAIlCd,EAAS,KAAOU,EAAS,KACzBW,EAAc,KAAK,IAAIL,EAAmBI,CAAY,GAGxDhB,EAAYiB,CAAW,EAEvB,MAAMC,EAAaH,EAAeT,EAAS,OAASI,EAC9CS,EAAab,EAAS,IAAMI,EAClC,IAAIU,EACAC,EAAY,GACZC,EAEAJ,EAAaP,GAAsBQ,EAAaD,GAClDG,EAAY,GACZD,EAAMd,EAAS,IAAM,EACrBgB,EAAkBH,EAAa,IAE/BC,EAAMd,EAAS,OAAS,EACxBgB,EAAkBJ,EAAa,GAIjChB,EAAa,KAAK,IAAI,KAAK,IAAI,IAAKoB,CAAe,EAAGT,CAAY,CAAC,EAEnEhB,EAAY,CACV,IAAAuB,EACA,GAAGxB,EACH,UAAAyB,CAAA,CACD,CACH,EAEAE,EAAAA,gBAAgB,IAAM,CACpBlB,EAAA,CACF,EAAG,CAAChB,EAAWc,CAAa,CAAC,EAG7BoB,EAAAA,gBAAgB,IAAM,CACpB,GAAInB,EAAgB,CAClB,MAAMoB,EAAiB,IAAI,eAAe,IAAM,CAC9CnB,EAAA,CACF,CAAC,EACD,OAAAmB,EAAe,QAAQpB,CAAc,EAC9B,IAAMoB,EAAe,WAAA,CAC9B,CACF,EAAG,CAACpB,EAAgBD,CAAa,CAAC,EAGlCoB,EAAAA,gBAAgB,IAAM,CACpB,MAAME,EAAsBC,GAAsB,CAChD,MAAMC,EAASD,EAAM,OAGnBhC,EAAS,SACT,CAACA,EAAS,QAAQ,SAASiC,CAAM,GACjCxB,GACA,CAACA,EAAc,SAASwB,CAAM,GAE9B,CAACA,EAAO,QAAQ,uBAAuB,GAEvC,CAACA,EAAO,cAAc,uBAAuB,GAE7C,CAACA,EAAO,QAAQ,QAAQ,GAExB,CAACA,EAAO,QAAQ,WAAW,GAC3B,CAACA,EAAO,QAAQ,gBAAgB,GAChC,CAACA,EAAO,QAAQ,eAAe,GAC/B,CAACA,EAAO,QAAQ,IAAM1C,CAAwB,IAG1C,SAAS,yBAAyB,aACpC,SAAS,cAAc,KAAA,EAEzBO,IAAA,EAEJ,EAEA,gBAAS,iBAAiB,YAAaiC,CAAkB,EAClD,IAAM,CACX,SAAS,oBAAoB,YAAaA,CAAkB,CAC9D,CACF,EAAG,CAACjC,EAASW,CAAa,CAAC,EAE3B,MAAMyB,EAAiB,GAA2C,CAEhE,MAAMD,EAAS,EAAE,OACbA,EAAO,UAAY,SAAWA,EAAO,UAAY,YAAcA,EAAO,mBAKtE,EAAE,MAAQ,WACZ,EAAE,gBAAA,EACFnC,IAAA,EAEJ,EAEA,OAAKH,EACEwC,EAAAA,aACLC,EAAAA,kBAAAA,IAAC5C,EAAA,CACC,IAAKQ,EACL,MAAO,CACL,IAAKE,GAAU,IACf,KAAMA,GAAU,KAChB,MAAOA,GAAU,MACjB,GAAIA,GAAU,WAAa,CAAE,UAAW,mBAAA,EACxC,WAAYA,EAAW,UAAY,SACnC,SAAUG,EAAW,GAAGA,CAAQ,KAAO,OACvC,UAAWE,EAAY,GAAGA,CAAS,KAAO,MAAA,EAE5C,UAAU,qBACV,UAAW2B,EAEV,SAAAnC,CAAA,CAAA,EAEH,SAAS,IAAA,EAlBY,IAoBzB"}
@@ -13,55 +13,55 @@ const I = "block-dialog-close", K = j.div`
13
13
  anchorId: k,
14
14
  containerClassName: A = "table-container",
15
15
  onClose: d,
16
- children: C
16
+ children: M
17
17
  }) => {
18
- const h = N(null), [s, x] = u(null), [v, b] = u(void 0), [y, R] = u(void 0), o = document.getElementById(k), r = o?.closest(`.${A}`), E = () => {
18
+ const h = N(null), [s, v] = u(null), [x, b] = u(void 0), [y, E] = u(void 0), o = document.getElementById(k), c = o?.closest(`.${A}`), R = () => {
19
19
  if (!l) return;
20
- if (!o || !r) {
21
- x({
20
+ if (!o || !c) {
21
+ v({
22
22
  top: window.innerHeight / 2,
23
23
  left: window.innerWidth / 2,
24
24
  showAbove: !1
25
- }), b(void 0), R(void 0);
25
+ }), b(void 0), E(void 0);
26
26
  return;
27
27
  }
28
- const t = o.getBoundingClientRect(), n = r.getBoundingClientRect(), e = n.right, O = window.innerWidth - n.right, i = 24, P = 250, c = 400, S = 600, H = window.innerWidth, B = window.innerHeight, L = e - t.left;
29
- let a = {}, p = c;
30
- L < c ? t.right - i >= c ? a.right = Math.max(
28
+ const t = o.getBoundingClientRect(), n = c.getBoundingClientRect(), e = n.right, O = window.innerWidth - n.right, i = 24, P = 250, r = 400, S = 600, H = window.innerWidth, B = window.innerHeight, L = e - t.left;
29
+ let a = {}, m = r;
30
+ L < r ? t.right - i >= r ? a.right = Math.max(
31
31
  H - t.right,
32
32
  i + O
33
- ) : (a.left = i, p = H - 2 * i) : (a.left = t.left, p = Math.max(c, L)), b(p);
34
- const g = B - t.bottom - i, T = t.top - i;
35
- let m, W = !1, f;
36
- g < P && T > g ? (W = !0, m = t.top - 4, f = T - 4) : (m = t.bottom + 4, f = g - 4), R(Math.min(Math.max(200, f), S)), x({
37
- top: m,
33
+ ) : (a.left = i, m = H - 2 * i) : (a.left = t.left, m = Math.max(r, L)), b(m);
34
+ const p = B - t.bottom - i, T = t.top - i;
35
+ let g, W = !1, f;
36
+ p < P && T > p ? (W = !0, g = t.top - 4, f = T - 4) : (g = t.bottom + 4, f = p - 4), E(Math.min(Math.max(200, f), S)), v({
37
+ top: g,
38
38
  ...a,
39
39
  showAbove: W
40
40
  });
41
41
  };
42
42
  w(() => {
43
- E();
43
+ R();
44
44
  }, [l, o]), w(() => {
45
- if (r) {
45
+ if (c) {
46
46
  const t = new ResizeObserver(() => {
47
- E();
47
+ R();
48
48
  });
49
- return t.observe(r), () => t.disconnect();
49
+ return t.observe(c), () => t.disconnect();
50
50
  }
51
- }, [r, o]), w(() => {
51
+ }, [c, o]), w(() => {
52
52
  const t = (n) => {
53
53
  const e = n.target;
54
54
  h.current && !h.current.contains(e) && o && !o.contains(e) && // check we are not clicking inside the EntityPickerDialog
55
55
  !e.closest(".entity-picker-dialog") && // check we are not clicking on the dialog backdrop
56
56
  !e.querySelector(".entity-picker-dialog") && // check we are not clicking inside another dialog
57
57
  !e.closest("dialog") && // check we are not clicking inside a dropdown
58
- !e.closest(".dropdown") && !e.closest(".p-dialog-mask") && !e.closest(".p-datepicker") && !e.closest("." + I) && d?.();
58
+ !e.closest(".dropdown") && !e.closest(".p-dialog-mask") && !e.closest(".p-datepicker") && !e.closest("." + I) && (document.activeElement instanceof HTMLElement && document.activeElement.blur(), d?.());
59
59
  };
60
60
  return document.addEventListener("mousedown", t), () => {
61
61
  document.removeEventListener("mousedown", t);
62
62
  };
63
63
  }, [d, o]);
64
- const M = (t) => {
64
+ const C = (t) => {
65
65
  const n = t.target;
66
66
  n.tagName === "INPUT" || n.tagName === "TEXTAREA" || n.isContentEditable || t.key === "Escape" && (t.stopPropagation(), d?.());
67
67
  };
@@ -76,12 +76,12 @@ const I = "block-dialog-close", K = j.div`
76
76
  right: s?.right,
77
77
  ...s?.showAbove && { transform: "translateY(-100%)" },
78
78
  visibility: s ? "visible" : "hidden",
79
- maxWidth: v ? `${v}px` : "none",
79
+ maxWidth: x ? `${x}px` : "none",
80
80
  maxHeight: y ? `${y}px` : "none"
81
81
  },
82
82
  className: "links-widget-popup",
83
- onKeyDown: M,
84
- children: C
83
+ onKeyDown: C,
84
+ children: M
85
85
  }
86
86
  ),
87
87
  document.body
@@ -1 +1 @@
1
- {"version":3,"file":"CellEditingDialog.es.js","sources":["../../../../../src/components/LinksManager/CellEditingDialog.tsx"],"sourcesContent":["import { FC, useRef, useLayoutEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { createPortal } from 'react-dom'\n\nexport const BLOCK_DIALOG_CLOSE_CLASS = 'block-dialog-close'\n\nconst StyledPopUp = styled.div`\n position: fixed;\n z-index: 310;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n`\n\ntype Position = {\n top: number\n left?: number\n right?: number\n showAbove?: boolean\n}\n\nexport interface LinksManagerDialogProps {\n isEditing: boolean\n anchorId: string\n containerClassName?: string\n onClose?: () => void\n children?: React.ReactNode\n}\n\nexport const CellEditingDialog: FC<LinksManagerDialogProps> = ({\n isEditing,\n anchorId,\n containerClassName = 'table-container',\n onClose,\n children,\n}) => {\n const popupRef = useRef<HTMLDivElement>(null)\n\n const [position, setPosition] = useState<Position | null>(null)\n const [maxWidth, setMaxWidth] = useState<number | undefined>(undefined)\n const [maxHeight, setMaxHeight] = useState<number | undefined>(undefined)\n\n // get the cell element based on the cellId\n const anchorElement = document.getElementById(anchorId)\n const tableContainer = anchorElement?.closest(`.${containerClassName}`)\n\n const updatePosition = () => {\n if (!isEditing) return\n\n if (!anchorElement || !tableContainer) {\n // if the anchor element is not found, position in the center of the screen\n setPosition({\n top: window.innerHeight / 2,\n left: window.innerWidth / 2,\n showAbove: false,\n })\n setMaxWidth(undefined)\n setMaxHeight(undefined)\n return\n }\n\n const cellRect = anchorElement.getBoundingClientRect()\n\n const containerRect = tableContainer.getBoundingClientRect()\n const containerRight = containerRect.right\n const containerToRightOfScreen = window.innerWidth - containerRect.right\n\n const screenPadding = 24\n const minHeightThreshold = 250\n const minWidthThreshold = 400\n const maxMaxHeight = 600\n const screenWidth = window.innerWidth\n const screenHeight = window.innerHeight\n\n // Check if we have enough space to the right of the cell\n const spaceToRight = containerRight - cellRect.left\n let position: { left?: number; right?: number } = {}\n let dialogWidth = minWidthThreshold\n\n if (spaceToRight < minWidthThreshold) {\n // Not enough space to the right, anchor to the right side of the cell\n const spaceToLeft = cellRect.right - screenPadding\n if (spaceToLeft >= minWidthThreshold) {\n // Anchor to the right side of the cell\n position.right = Math.max(\n screenWidth - cellRect.right,\n screenPadding + containerToRightOfScreen,\n )\n } else {\n // Not enough space on either side, center and use available width\n position.left = screenPadding\n dialogWidth = screenWidth - 2 * screenPadding\n }\n } else {\n // Enough space to the right, position normally\n position.left = cellRect.left\n dialogWidth = Math.max(minWidthThreshold, spaceToRight)\n }\n\n setMaxWidth(dialogWidth)\n\n const spaceBelow = screenHeight - cellRect.bottom - screenPadding\n const spaceAbove = cellRect.top - screenPadding\n let top: number\n let showAbove = false\n let availableHeight: number\n\n if (spaceBelow < minHeightThreshold && spaceAbove > spaceBelow) {\n showAbove = true\n top = cellRect.top - 4\n availableHeight = spaceAbove - 4\n } else {\n top = cellRect.bottom + 4\n availableHeight = spaceBelow - 4\n }\n\n // Set max height to prevent dialog from going off screen\n setMaxHeight(Math.min(Math.max(200, availableHeight), maxMaxHeight)) // Minimum 200px height\n\n setPosition({\n top,\n ...position,\n showAbove,\n })\n }\n\n useLayoutEffect(() => {\n updatePosition()\n }, [isEditing, anchorElement])\n\n // watch for when the tableContainer width changes\n useLayoutEffect(() => {\n if (tableContainer) {\n const resizeObserver = new ResizeObserver(() => {\n updatePosition()\n })\n resizeObserver.observe(tableContainer)\n return () => resizeObserver.disconnect()\n }\n }, [tableContainer, anchorElement])\n\n // close the dialog when clicking outside of it\n useLayoutEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement\n\n if (\n popupRef.current &&\n !popupRef.current.contains(target) &&\n anchorElement &&\n !anchorElement.contains(target) &&\n // check we are not clicking inside the EntityPickerDialog\n !target.closest('.entity-picker-dialog') &&\n // check we are not clicking on the dialog backdrop\n !target.querySelector('.entity-picker-dialog') &&\n // check we are not clicking inside another dialog\n !target.closest('dialog') &&\n // check we are not clicking inside a dropdown\n !target.closest('.dropdown') &&\n !target.closest('.p-dialog-mask') &&\n !target.closest('.p-datepicker') &&\n !target.closest('.' + BLOCK_DIALOG_CLOSE_CLASS)\n ) {\n onClose?.()\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [onClose, anchorElement])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n // check we are not inside an input or textarea\n const target = e.target as HTMLElement\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return\n }\n\n // close dialog on escape\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose?.()\n }\n }\n\n if (!isEditing) return null\n return createPortal(\n <StyledPopUp\n ref={popupRef}\n style={{\n top: position?.top,\n left: position?.left,\n right: position?.right,\n ...(position?.showAbove && { transform: 'translateY(-100%)' }),\n visibility: position ? 'visible' : 'hidden',\n maxWidth: maxWidth ? `${maxWidth}px` : 'none',\n maxHeight: maxHeight ? `${maxHeight}px` : 'none',\n }}\n className=\"links-widget-popup\"\n onKeyDown={handleKeyDown}\n >\n {children}\n </StyledPopUp>,\n document.body,\n )\n}\n"],"names":["BLOCK_DIALOG_CLOSE_CLASS","StyledPopUp","styled","CellEditingDialog","isEditing","anchorId","containerClassName","onClose","children","popupRef","useRef","position","setPosition","useState","maxWidth","setMaxWidth","maxHeight","setMaxHeight","anchorElement","tableContainer","updatePosition","cellRect","containerRect","containerRight","containerToRightOfScreen","screenPadding","minHeightThreshold","minWidthThreshold","maxMaxHeight","screenWidth","screenHeight","spaceToRight","dialogWidth","spaceBelow","spaceAbove","top","showAbove","availableHeight","useLayoutEffect","resizeObserver","handleClickOutside","event","target","handleKeyDown","e","createPortal","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"CellEditingDialog.es.js","sources":["../../../../../src/components/LinksManager/CellEditingDialog.tsx"],"sourcesContent":["import { FC, useRef, useLayoutEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { createPortal } from 'react-dom'\n\nexport const BLOCK_DIALOG_CLOSE_CLASS = 'block-dialog-close'\n\nconst StyledPopUp = styled.div`\n position: fixed;\n z-index: 310;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n`\n\ntype Position = {\n top: number\n left?: number\n right?: number\n showAbove?: boolean\n}\n\nexport interface LinksManagerDialogProps {\n isEditing: boolean\n anchorId: string\n containerClassName?: string\n onClose?: () => void\n children?: React.ReactNode\n}\n\nexport const CellEditingDialog: FC<LinksManagerDialogProps> = ({\n isEditing,\n anchorId,\n containerClassName = 'table-container',\n onClose,\n children,\n}) => {\n const popupRef = useRef<HTMLDivElement>(null)\n\n const [position, setPosition] = useState<Position | null>(null)\n const [maxWidth, setMaxWidth] = useState<number | undefined>(undefined)\n const [maxHeight, setMaxHeight] = useState<number | undefined>(undefined)\n\n // get the cell element based on the cellId\n const anchorElement = document.getElementById(anchorId)\n const tableContainer = anchorElement?.closest(`.${containerClassName}`)\n\n const updatePosition = () => {\n if (!isEditing) return\n\n if (!anchorElement || !tableContainer) {\n // if the anchor element is not found, position in the center of the screen\n setPosition({\n top: window.innerHeight / 2,\n left: window.innerWidth / 2,\n showAbove: false,\n })\n setMaxWidth(undefined)\n setMaxHeight(undefined)\n return\n }\n\n const cellRect = anchorElement.getBoundingClientRect()\n\n const containerRect = tableContainer.getBoundingClientRect()\n const containerRight = containerRect.right\n const containerToRightOfScreen = window.innerWidth - containerRect.right\n\n const screenPadding = 24\n const minHeightThreshold = 250\n const minWidthThreshold = 400\n const maxMaxHeight = 600\n const screenWidth = window.innerWidth\n const screenHeight = window.innerHeight\n\n // Check if we have enough space to the right of the cell\n const spaceToRight = containerRight - cellRect.left\n let position: { left?: number; right?: number } = {}\n let dialogWidth = minWidthThreshold\n\n if (spaceToRight < minWidthThreshold) {\n // Not enough space to the right, anchor to the right side of the cell\n const spaceToLeft = cellRect.right - screenPadding\n if (spaceToLeft >= minWidthThreshold) {\n // Anchor to the right side of the cell\n position.right = Math.max(\n screenWidth - cellRect.right,\n screenPadding + containerToRightOfScreen,\n )\n } else {\n // Not enough space on either side, center and use available width\n position.left = screenPadding\n dialogWidth = screenWidth - 2 * screenPadding\n }\n } else {\n // Enough space to the right, position normally\n position.left = cellRect.left\n dialogWidth = Math.max(minWidthThreshold, spaceToRight)\n }\n\n setMaxWidth(dialogWidth)\n\n const spaceBelow = screenHeight - cellRect.bottom - screenPadding\n const spaceAbove = cellRect.top - screenPadding\n let top: number\n let showAbove = false\n let availableHeight: number\n\n if (spaceBelow < minHeightThreshold && spaceAbove > spaceBelow) {\n showAbove = true\n top = cellRect.top - 4\n availableHeight = spaceAbove - 4\n } else {\n top = cellRect.bottom + 4\n availableHeight = spaceBelow - 4\n }\n\n // Set max height to prevent dialog from going off screen\n setMaxHeight(Math.min(Math.max(200, availableHeight), maxMaxHeight)) // Minimum 200px height\n\n setPosition({\n top,\n ...position,\n showAbove,\n })\n }\n\n useLayoutEffect(() => {\n updatePosition()\n }, [isEditing, anchorElement])\n\n // watch for when the tableContainer width changes\n useLayoutEffect(() => {\n if (tableContainer) {\n const resizeObserver = new ResizeObserver(() => {\n updatePosition()\n })\n resizeObserver.observe(tableContainer)\n return () => resizeObserver.disconnect()\n }\n }, [tableContainer, anchorElement])\n\n // close the dialog when clicking outside of it\n useLayoutEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement\n\n if (\n popupRef.current &&\n !popupRef.current.contains(target) &&\n anchorElement &&\n !anchorElement.contains(target) &&\n // check we are not clicking inside the EntityPickerDialog\n !target.closest('.entity-picker-dialog') &&\n // check we are not clicking on the dialog backdrop\n !target.querySelector('.entity-picker-dialog') &&\n // check we are not clicking inside another dialog\n !target.closest('dialog') &&\n // check we are not clicking inside a dropdown\n !target.closest('.dropdown') &&\n !target.closest('.p-dialog-mask') &&\n !target.closest('.p-datepicker') &&\n !target.closest('.' + BLOCK_DIALOG_CLOSE_CLASS)\n ) {\n // Blur active element first so inputs can commit their values before unmount\n if (document.activeElement instanceof HTMLElement) {\n document.activeElement.blur()\n }\n onClose?.()\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [onClose, anchorElement])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n // check we are not inside an input or textarea\n const target = e.target as HTMLElement\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return\n }\n\n // close dialog on escape\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose?.()\n }\n }\n\n if (!isEditing) return null\n return createPortal(\n <StyledPopUp\n ref={popupRef}\n style={{\n top: position?.top,\n left: position?.left,\n right: position?.right,\n ...(position?.showAbove && { transform: 'translateY(-100%)' }),\n visibility: position ? 'visible' : 'hidden',\n maxWidth: maxWidth ? `${maxWidth}px` : 'none',\n maxHeight: maxHeight ? `${maxHeight}px` : 'none',\n }}\n className=\"links-widget-popup\"\n onKeyDown={handleKeyDown}\n >\n {children}\n </StyledPopUp>,\n document.body,\n )\n}\n"],"names":["BLOCK_DIALOG_CLOSE_CLASS","StyledPopUp","styled","CellEditingDialog","isEditing","anchorId","containerClassName","onClose","children","popupRef","useRef","position","setPosition","useState","maxWidth","setMaxWidth","maxHeight","setMaxHeight","anchorElement","tableContainer","updatePosition","cellRect","containerRect","containerRight","containerToRightOfScreen","screenPadding","minHeightThreshold","minWidthThreshold","maxMaxHeight","screenWidth","screenHeight","spaceToRight","dialogWidth","spaceBelow","spaceAbove","top","showAbove","availableHeight","useLayoutEffect","resizeObserver","handleClickOutside","event","target","handleKeyDown","e","createPortal","jsx"],"mappings":";;;;AAIO,MAAMA,IAA2B,sBAElCC,IAAcC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuBdC,IAAiD,CAAC;AAAA,EAC7D,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,oBAAAC,IAAqB;AAAA,EACrB,SAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACJ,QAAMC,IAAWC,EAAuB,IAAI,GAEtC,CAACC,GAAUC,CAAW,IAAIC,EAA0B,IAAI,GACxD,CAACC,GAAUC,CAAW,IAAIF,EAA6B,MAAS,GAChE,CAACG,GAAWC,CAAY,IAAIJ,EAA6B,MAAS,GAGlEK,IAAgB,SAAS,eAAeb,CAAQ,GAChDc,IAAiBD,GAAe,QAAQ,IAAIZ,CAAkB,EAAE,GAEhEc,IAAiB,MAAM;AAC3B,QAAI,CAAChB,EAAW;AAEhB,QAAI,CAACc,KAAiB,CAACC,GAAgB;AAErC,MAAAP,EAAY;AAAA,QACV,KAAK,OAAO,cAAc;AAAA,QAC1B,MAAM,OAAO,aAAa;AAAA,QAC1B,WAAW;AAAA,MAAA,CACZ,GACDG,EAAY,MAAS,GACrBE,EAAa,MAAS;AACtB;AAAA,IACF;AAEA,UAAMI,IAAWH,EAAc,sBAAA,GAEzBI,IAAgBH,EAAe,sBAAA,GAC/BI,IAAiBD,EAAc,OAC/BE,IAA2B,OAAO,aAAaF,EAAc,OAE7DG,IAAgB,IAChBC,IAAqB,KACrBC,IAAoB,KACpBC,IAAe,KACfC,IAAc,OAAO,YACrBC,IAAe,OAAO,aAGtBC,IAAeR,IAAiBF,EAAS;AAC/C,QAAIV,IAA8C,CAAA,GAC9CqB,IAAcL;AAElB,IAAII,IAAeJ,IAEGN,EAAS,QAAQI,KAClBE,IAEjBhB,EAAS,QAAQ,KAAK;AAAA,MACpBkB,IAAcR,EAAS;AAAA,MACvBI,IAAgBD;AAAA,IAAA,KAIlBb,EAAS,OAAOc,GAChBO,IAAcH,IAAc,IAAIJ,MAIlCd,EAAS,OAAOU,EAAS,MACzBW,IAAc,KAAK,IAAIL,GAAmBI,CAAY,IAGxDhB,EAAYiB,CAAW;AAEvB,UAAMC,IAAaH,IAAeT,EAAS,SAASI,GAC9CS,IAAab,EAAS,MAAMI;AAClC,QAAIU,GACAC,IAAY,IACZC;AAEJ,IAAIJ,IAAaP,KAAsBQ,IAAaD,KAClDG,IAAY,IACZD,IAAMd,EAAS,MAAM,GACrBgB,IAAkBH,IAAa,MAE/BC,IAAMd,EAAS,SAAS,GACxBgB,IAAkBJ,IAAa,IAIjChB,EAAa,KAAK,IAAI,KAAK,IAAI,KAAKoB,CAAe,GAAGT,CAAY,CAAC,GAEnEhB,EAAY;AAAA,MACV,KAAAuB;AAAA,MACA,GAAGxB;AAAAA,MACH,WAAAyB;AAAA,IAAA,CACD;AAAA,EACH;AAEA,EAAAE,EAAgB,MAAM;AACpB,IAAAlB,EAAA;AAAA,EACF,GAAG,CAAChB,GAAWc,CAAa,CAAC,GAG7BoB,EAAgB,MAAM;AACpB,QAAInB,GAAgB;AAClB,YAAMoB,IAAiB,IAAI,eAAe,MAAM;AAC9C,QAAAnB,EAAA;AAAA,MACF,CAAC;AACD,aAAAmB,EAAe,QAAQpB,CAAc,GAC9B,MAAMoB,EAAe,WAAA;AAAA,IAC9B;AAAA,EACF,GAAG,CAACpB,GAAgBD,CAAa,CAAC,GAGlCoB,EAAgB,MAAM;AACpB,UAAME,IAAqB,CAACC,MAAsB;AAChD,YAAMC,IAASD,EAAM;AAErB,MACEhC,EAAS,WACT,CAACA,EAAS,QAAQ,SAASiC,CAAM,KACjCxB,KACA,CAACA,EAAc,SAASwB,CAAM;AAAA,MAE9B,CAACA,EAAO,QAAQ,uBAAuB;AAAA,MAEvC,CAACA,EAAO,cAAc,uBAAuB;AAAA,MAE7C,CAACA,EAAO,QAAQ,QAAQ;AAAA,MAExB,CAACA,EAAO,QAAQ,WAAW,KAC3B,CAACA,EAAO,QAAQ,gBAAgB,KAChC,CAACA,EAAO,QAAQ,eAAe,KAC/B,CAACA,EAAO,QAAQ,MAAM1C,CAAwB,MAG1C,SAAS,yBAAyB,eACpC,SAAS,cAAc,KAAA,GAEzBO,IAAA;AAAA,IAEJ;AAEA,oBAAS,iBAAiB,aAAaiC,CAAkB,GAClD,MAAM;AACX,eAAS,oBAAoB,aAAaA,CAAkB;AAAA,IAC9D;AAAA,EACF,GAAG,CAACjC,GAASW,CAAa,CAAC;AAE3B,QAAMyB,IAAgB,CAACC,MAA2C;AAEhE,UAAMF,IAASE,EAAE;AACjB,IAAIF,EAAO,YAAY,WAAWA,EAAO,YAAY,cAAcA,EAAO,qBAKtEE,EAAE,QAAQ,aACZA,EAAE,gBAAA,GACFrC,IAAA;AAAA,EAEJ;AAEA,SAAKH,IACEyC;AAAA,IACLC,gBAAAA,EAAAA;AAAAA,MAAC7C;AAAA,MAAA;AAAA,QACC,KAAKQ;AAAA,QACL,OAAO;AAAA,UACL,KAAKE,GAAU;AAAA,UACf,MAAMA,GAAU;AAAA,UAChB,OAAOA,GAAU;AAAA,UACjB,GAAIA,GAAU,aAAa,EAAE,WAAW,oBAAA;AAAA,UACxC,YAAYA,IAAW,YAAY;AAAA,UACnC,UAAUG,IAAW,GAAGA,CAAQ,OAAO;AAAA,UACvC,WAAWE,IAAY,GAAGA,CAAS,OAAO;AAAA,QAAA;AAAA,QAE5C,WAAU;AAAA,QACV,WAAW2B;AAAA,QAEV,UAAAnC;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,SAAS;AAAA,EAAA,IAlBY;AAoBzB;"}