@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":"SelectionCellsProvider.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/SelectionCellsProvider.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo, useRef, useState } from 'react'\nimport {\n BorderPosition,\n CellId,\n CellPosition,\n ColId,\n getBorderClasses,\n getCellId,\n parseCellId,\n RowId,\n} from '../utils/cellUtils'\nimport { DRAG_HANDLE_COLUMN_ID } from '../ProjectTreeTable'\nimport { GridMap, ROW_SELECTION_COLUMN_ID, SelectionCellsContext } from './SelectionCellsContext'\nimport { useCheckSelectedCellsVisible } from '../hooks'\n\nexport const SelectionCellsProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [selectedCells, setSelectedCells] = useState<Set<CellId>>(new Set())\n const [focusedCellId, setFocusedCellId] = useState<CellId | null>(null)\n const [selectionInProgress, setSelectionInProgress] = useState<boolean>(false)\n const [anchorCell, setAnchorCell] = useState<CellPosition | null>(null)\n const [gridMap, setGridMap] = useState<GridMap>({\n rowIdToIndex: new Map(),\n colIdToIndex: new Map(),\n indexToRowId: new Map(),\n indexToColId: new Map(),\n })\n const mapToString = (map: Map<any, any>) => {\n return JSON.stringify(Array.from(map.entries()))\n }\n\n const stableGridMap = useMemo(\n () => gridMap,\n [\n mapToString(gridMap.rowIdToIndex),\n mapToString(gridMap.colIdToIndex),\n mapToString(gridMap.indexToRowId),\n mapToString(gridMap.indexToColId),\n ],\n )\n // Track whether we're selecting or unselecting during drag\n const initialCellSelected = useRef<boolean>(false)\n\n const selectedRows = useMemo(\n () =>\n Array.from(selectedCells)\n .filter(\n (cellId) =>\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID && parseCellId(cellId)?.rowId,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[],\n [selectedCells],\n )\n\n useCheckSelectedCellsVisible({\n selectedCells,\n setSelectedCells,\n focusedCellId,\n setFocusedCellId,\n })\n const isAdditiveSelectionRef = useRef<boolean>(false)\n // Register grid structure for range selections\n const registerGrid = useCallback((rows: RowId[], columns: ColId[]) => {\n const rowIdToIndex = new Map<RowId, number>()\n const colIdToIndex = new Map<ColId, number>()\n const indexToRowId = new Map<number, RowId>()\n const indexToColId = new Map<number, ColId>()\n\n rows.forEach((rowId, index) => {\n rowIdToIndex.set(rowId, index)\n indexToRowId.set(index, rowId)\n })\n\n columns.forEach((colId, index) => {\n colIdToIndex.set(colId, index)\n indexToColId.set(index, colId)\n })\n\n setGridMap({ rowIdToIndex, colIdToIndex, indexToRowId, indexToColId })\n }, [])\n\n // update the selection whilst properly handling the row-selection column\n const updateSelection = useCallback((selection: Set<CellId>, position: CellPosition) => {\n setSelectedCells((prevSelectedCells) => {\n let newSelection = new Set(selection)\n if (position.colId !== ROW_SELECTION_COLUMN_ID && position.colId !== DRAG_HANDLE_COLUMN_ID) {\n const rowSelection = Array.from(prevSelectedCells).filter(\n (id) => parseCellId(id)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n if (rowSelection.length) {\n newSelection = new Set([...newSelection, ...rowSelection])\n }\n }\n return newSelection\n })\n }, [])\n\n // Select cells between two points in the grid\n const selectCellRange = useCallback(\n (start: CellPosition, end: CellPosition, additive: boolean): Set<CellId> => {\n if (!additive) {\n // Clear existing selection if not additive\n updateSelection(new Set(), start)\n }\n\n const startRowIdx = stableGridMap.rowIdToIndex.get(start.rowId) ?? 0\n const startColIdx = stableGridMap.colIdToIndex.get(start.colId) ?? 0\n const endRowIdx = stableGridMap.rowIdToIndex.get(end.rowId) ?? 0\n const endColIdx = stableGridMap.colIdToIndex.get(end.colId) ?? 0\n\n const minRowIdx = Math.min(startRowIdx, endRowIdx)\n const maxRowIdx = Math.max(startRowIdx, endRowIdx)\n const minColIdx = Math.min(startColIdx, endColIdx)\n const maxColIdx = Math.max(startColIdx, endColIdx)\n\n const newSelection = new Set(additive ? selectedCells : [])\n\n for (let r = minRowIdx; r <= maxRowIdx; r++) {\n const rowId = stableGridMap.indexToRowId.get(r)\n if (!rowId) continue\n\n for (let c = minColIdx; c <= maxColIdx; c++) {\n const colId = stableGridMap.indexToColId.get(c)\n if (!colId) continue\n\n newSelection.add(getCellId(rowId, colId))\n }\n }\n\n return newSelection\n },\n [stableGridMap, selectedCells, updateSelection],\n )\n\n // Start a selection operation\n const startSelection = useCallback(\n (cellId: CellId, additive: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n setSelectionInProgress(true)\n isAdditiveSelectionRef.current = additive\n // Store whether the initial cell was selected to determine drag behavior\n initialCellSelected.current = selectedCells.has(cellId)\n\n if (additive) {\n // Toggle this cell in multi-select mode\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n // If this was the focused cell, set focus to another cell in the selection or null\n if (focusedCellId === cellId) {\n if (newSelection.size > 0) {\n setFocusedCellId(Array.from(newSelection)[Array.from(newSelection).length - 1])\n } else {\n setFocusedCellId(null)\n }\n }\n } else {\n newSelection.add(cellId)\n setFocusedCellId(cellId)\n setAnchorCell(position)\n }\n return newSelection\n })\n } else {\n // Single cell selection\n // If this cell is already the only selected cell, deselect it\n // and it is from name column\n if (\n selectedCells.size === 1 &&\n selectedCells.has(cellId) &&\n [ROW_SELECTION_COLUMN_ID, 'name'].includes(position.colId)\n ) {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n } else {\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n setFocusedCellId(cellId)\n }\n }\n },\n [selectedCells, focusedCellId, updateSelection],\n )\n\n // Extend the current selection during drag\n const extendSelection = useCallback(\n (cellId: CellId, isRowSelectionColumn?: boolean) => {\n if (!selectionInProgress || !anchorCell) return\n\n const currentPosition = parseCellId(cellId)\n if (!currentPosition) return\n\n if (isRowSelectionColumn) {\n // Handle row selection column differently during drag\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n const position = parseCellId(cellId)\n\n if (!position) return newSelection\n\n // We're either selecting or unselecting based on the initial cell's state\n if (initialCellSelected.current) {\n // If we started on a selected cell, we're removing cells during drag\n newSelection.delete(cellId)\n } else {\n // If we started on an unselected cell, we're adding cells during drag\n newSelection.add(cellId)\n }\n\n return newSelection\n })\n } else {\n if (isAdditiveSelectionRef.current) return\n // For normal cells - ALWAYS does range selection\n const newSelection = selectCellRange(anchorCell, currentPosition, isAdditiveSelectionRef.current,)\n updateSelection(newSelection, currentPosition)\n }\n },\n [selectionInProgress, anchorCell, selectCellRange, updateSelection],\n )\n\n // End a selection operation\n const endSelection = useCallback(() => {\n setSelectionInProgress(false)\n }, [])\n\n // Select a cell (click or programmatically)\n const selectCell = useCallback(\n (cellId: CellId, additive: boolean, range: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n if (range && anchorCell) {\n // Shift+click for range selection - select cells between anchor and current\n const newSelection = selectCellRange(anchorCell, position, additive)\n updateSelection(newSelection, position)\n } else if (additive) {\n // Ctrl/Cmd+click for toggling selection\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n } else {\n newSelection.add(cellId)\n }\n return newSelection\n })\n } else {\n // Normal click - select just this cell and set as new anchor\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n }\n },\n [anchorCell, selectCellRange, updateSelection],\n )\n\n // Focus a cell without changing selection\n const focusCell = useCallback((cellId: CellId | null) => {\n setFocusedCellId(cellId)\n }, [])\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n }, [])\n\n // Check if a cell is selected\n const isCellSelected = useCallback((cellId: CellId) => selectedCells.has(cellId), [selectedCells])\n\n // Check if a cell is focused\n const isCellFocused = useCallback((cellId: CellId) => cellId === focusedCellId, [focusedCellId])\n\n // Get position from cell ID - using shared utility\n const getCellPositionFromId = useCallback((cellId: CellId) => parseCellId(cellId), [])\n\n // Get border classes for a cell based on its selection state and neighbors\n const getCellBorderClasses = useCallback(\n (cellId: CellId): string[] => {\n if (!isCellSelected(cellId)) return []\n\n const position = parseCellId(cellId)\n if (!position) return []\n\n const rowIndex = stableGridMap.rowIdToIndex.get(position.rowId)\n const colIndex = stableGridMap.colIdToIndex.get(position.colId)\n\n if (rowIndex === undefined || colIndex === undefined) return []\n\n // Check if the cell's neighbors in all four directions are selected\n const top = stableGridMap.indexToRowId.get(rowIndex - 1)\n const right = stableGridMap.indexToColId.get(colIndex + 1)\n const bottom = stableGridMap.indexToRowId.get(rowIndex + 1)\n const left = stableGridMap.indexToColId.get(colIndex - 1)\n\n // Default to no borders\n let borderPos = BorderPosition.None\n\n // Top edge check: show border if we're at the top of the grid or the cell above is not selected\n if (!top || !selectedCells.has(getCellId(top, position.colId))) {\n borderPos |= BorderPosition.Top\n }\n\n // Right edge check: show border if we're at the right edge of the grid or the cell to the right is not selected\n if (!right || !selectedCells.has(getCellId(position.rowId, right))) {\n borderPos |= BorderPosition.Right\n }\n\n // Bottom edge check: show border if we're at the bottom of the grid or the cell below is not selected\n if (!bottom || !selectedCells.has(getCellId(bottom, position.colId))) {\n borderPos |= BorderPosition.Bottom\n }\n\n // Left edge check: show border if we're at the left edge of the grid or the cell to the left is not selected\n if (!left || !selectedCells.has(getCellId(position.rowId, left))) {\n borderPos |= BorderPosition.Left\n }\n\n return getBorderClasses(borderPos)\n },\n [selectedCells, stableGridMap, isCellSelected],\n )\n\n // Memoize context value to prevent unnecessary re-renders\n const value = useMemo(\n () => ({\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n gridMap: stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n }),\n [\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n ],\n )\n\n return <SelectionCellsContext.Provider value={value}>{children}</SelectionCellsContext.Provider>\n}\n"],"names":["SelectionCellsProvider","children","selectedCells","setSelectedCells","useState","focusedCellId","setFocusedCellId","selectionInProgress","setSelectionInProgress","anchorCell","setAnchorCell","gridMap","setGridMap","mapToString","map","stableGridMap","useMemo","initialCellSelected","useRef","selectedRows","cellId","parseCellId","ROW_SELECTION_COLUMN_ID","useCheckSelectedCellsVisible","isAdditiveSelectionRef","registerGrid","useCallback","rows","columns","rowIdToIndex","colIdToIndex","indexToRowId","indexToColId","rowId","index","colId","updateSelection","selection","position","prevSelectedCells","newSelection","DRAG_HANDLE_COLUMN_ID","rowSelection","id","selectCellRange","start","end","additive","startRowIdx","startColIdx","endRowIdx","endColIdx","minRowIdx","maxRowIdx","minColIdx","maxColIdx","r","c","getCellId","startSelection","prev","extendSelection","isRowSelectionColumn","currentPosition","endSelection","selectCell","range","focusCell","clearSelection","isCellSelected","isCellFocused","getCellPositionFromId","getCellBorderClasses","rowIndex","colIndex","top","right","bottom","left","borderPos","BorderPosition","getBorderClasses","value","jsx","SelectionCellsContext"],"mappings":"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"}
1
+ {"version":3,"file":"SelectionCellsProvider.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/SelectionCellsProvider.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo, useRef, useState } from 'react'\nimport {\n BorderPosition,\n CellId,\n CellPosition,\n ColId,\n getBorderClasses,\n getCellId,\n parseCellId,\n RowId,\n} from '../utils/cellUtils'\nimport { DRAG_HANDLE_COLUMN_ID } from '../ProjectTreeTable'\nimport { GridMap, ROW_SELECTION_COLUMN_ID, SelectionCellsContext } from './SelectionCellsContext'\nimport { useCheckSelectedCellsVisible } from '../hooks'\n\nexport const SelectionCellsProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [selectedCells, setSelectedCells] = useState<Set<CellId>>(new Set())\n const [focusedCellId, setFocusedCellId] = useState<CellId | null>(null)\n const [selectionInProgress, setSelectionInProgress] = useState<boolean>(false)\n const [anchorCell, setAnchorCell] = useState<CellPosition | null>(null)\n const [gridMap, setGridMap] = useState<GridMap>({\n rowIdToIndex: new Map(),\n colIdToIndex: new Map(),\n indexToRowId: new Map(),\n indexToColId: new Map(),\n })\n const mapToString = (map: Map<any, any>) => {\n return JSON.stringify(Array.from(map.entries()))\n }\n\n const stableGridMap = useMemo(\n () => gridMap,\n [\n mapToString(gridMap.rowIdToIndex),\n mapToString(gridMap.colIdToIndex),\n mapToString(gridMap.indexToRowId),\n mapToString(gridMap.indexToColId),\n ],\n )\n // Track whether we're selecting or unselecting during drag\n const initialCellSelected = useRef<boolean>(false)\n\n const selectedRows = useMemo(\n () =>\n Array.from(selectedCells)\n .filter(\n (cellId) =>\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID && parseCellId(cellId)?.rowId,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[],\n [selectedCells],\n )\n\n useCheckSelectedCellsVisible({\n selectedCells,\n setSelectedCells,\n focusedCellId,\n setFocusedCellId,\n })\n const isAdditiveSelectionRef = useRef<boolean>(false)\n // Register grid structure for range selections\n const registerGrid = useCallback((rows: RowId[], columns: ColId[]) => {\n const rowIdToIndex = new Map<RowId, number>()\n const colIdToIndex = new Map<ColId, number>()\n const indexToRowId = new Map<number, RowId>()\n const indexToColId = new Map<number, ColId>()\n\n rows.forEach((rowId, index) => {\n rowIdToIndex.set(rowId, index)\n indexToRowId.set(index, rowId)\n })\n\n columns.forEach((colId, index) => {\n colIdToIndex.set(colId, index)\n indexToColId.set(index, colId)\n })\n\n setGridMap({ rowIdToIndex, colIdToIndex, indexToRowId, indexToColId })\n }, [])\n\n // update the selection whilst properly handling the row-selection column\n const updateSelection = useCallback((selection: Set<CellId>, position: CellPosition) => {\n setSelectedCells((prevSelectedCells) => {\n let newSelection = new Set(selection)\n if (position.colId !== ROW_SELECTION_COLUMN_ID && position.colId !== DRAG_HANDLE_COLUMN_ID) {\n const rowSelection = Array.from(prevSelectedCells).filter(\n (id) => parseCellId(id)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n if (rowSelection.length) {\n newSelection = new Set([...newSelection, ...rowSelection])\n }\n }\n return newSelection\n })\n }, [])\n\n // Select cells between two points in the grid\n const selectCellRange = useCallback(\n (start: CellPosition, end: CellPosition, additive: boolean): Set<CellId> => {\n if (!additive) {\n // Clear existing selection if not additive\n updateSelection(new Set(), start)\n }\n\n const startRowIdx = stableGridMap.rowIdToIndex.get(start.rowId) ?? 0\n const startColIdx = stableGridMap.colIdToIndex.get(start.colId) ?? 0\n const endRowIdx = stableGridMap.rowIdToIndex.get(end.rowId) ?? 0\n const endColIdx = stableGridMap.colIdToIndex.get(end.colId) ?? 0\n\n const minRowIdx = Math.min(startRowIdx, endRowIdx)\n const maxRowIdx = Math.max(startRowIdx, endRowIdx)\n const minColIdx = Math.min(startColIdx, endColIdx)\n const maxColIdx = Math.max(startColIdx, endColIdx)\n\n const newSelection = new Set(additive ? selectedCells : [])\n\n for (let r = minRowIdx; r <= maxRowIdx; r++) {\n const rowId = stableGridMap.indexToRowId.get(r)\n if (!rowId) continue\n\n for (let c = minColIdx; c <= maxColIdx; c++) {\n const colId = stableGridMap.indexToColId.get(c)\n if (!colId) continue\n\n newSelection.add(getCellId(rowId, colId))\n }\n }\n\n return newSelection\n },\n [stableGridMap, selectedCells, updateSelection],\n )\n\n // Start a selection operation\n const startSelection = useCallback(\n (cellId: CellId, additive: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n setSelectionInProgress(true)\n isAdditiveSelectionRef.current = additive\n // Store whether the initial cell was selected to determine drag behavior\n initialCellSelected.current = selectedCells.has(cellId)\n\n if (additive) {\n // Toggle this cell in multi-select mode\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n // If this was the focused cell, set focus to another cell in the selection or null\n if (focusedCellId === cellId) {\n if (newSelection.size > 0) {\n setFocusedCellId(Array.from(newSelection)[Array.from(newSelection).length - 1])\n } else {\n setFocusedCellId(null)\n }\n }\n } else {\n newSelection.add(cellId)\n setFocusedCellId(cellId)\n setAnchorCell(position)\n }\n return newSelection\n })\n } else {\n // Single cell selection\n // If this cell is already the only selected cell, deselect it\n // and it is from name column\n if (\n selectedCells.size === 1 &&\n selectedCells.has(cellId) &&\n [ROW_SELECTION_COLUMN_ID, 'name'].includes(position.colId)\n ) {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n } else {\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n setFocusedCellId(cellId)\n }\n }\n },\n [selectedCells, focusedCellId, updateSelection],\n )\n\n // Extend the current selection during drag\n const extendSelection = useCallback(\n (cellId: CellId, isRowSelectionColumn?: boolean) => {\n if (!selectionInProgress || !anchorCell) return\n\n const currentPosition = parseCellId(cellId)\n if (!currentPosition) return\n\n if (isRowSelectionColumn) {\n // Handle row selection column differently during drag\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n const position = parseCellId(cellId)\n\n if (!position) return newSelection\n\n // We're either selecting or unselecting based on the initial cell's state\n if (initialCellSelected.current) {\n // If we started on a selected cell, we're removing cells during drag\n newSelection.delete(cellId)\n } else {\n // If we started on an unselected cell, we're adding cells during drag\n newSelection.add(cellId)\n }\n\n return newSelection\n })\n } else {\n if (isAdditiveSelectionRef.current) return\n // For normal cells - ALWAYS does range selection\n const newSelection = selectCellRange(anchorCell, currentPosition, isAdditiveSelectionRef.current,)\n updateSelection(newSelection, currentPosition)\n }\n },\n [selectionInProgress, anchorCell, selectCellRange, updateSelection],\n )\n\n // End a selection operation\n const endSelection = useCallback(() => {\n setSelectionInProgress(false)\n }, [])\n\n // Select a cell (click or programmatically)\n const selectCell = useCallback(\n (cellId: CellId, additive: boolean, range: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n if (range && anchorCell) {\n // Shift+click for range selection - select cells between anchor and current\n const newSelection = selectCellRange(anchorCell, position, additive)\n updateSelection(newSelection, position)\n } else if (additive) {\n // Ctrl/Cmd+click for toggling selection\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n } else {\n newSelection.add(cellId)\n }\n return newSelection\n })\n } else {\n // Normal click - select just this cell and set as new anchor\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n }\n },\n [anchorCell, selectCellRange, updateSelection],\n )\n\n // Focus a cell without changing selection\n const focusCell = useCallback((cellId: CellId | null) => {\n setFocusedCellId(cellId)\n }, [])\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n }, [])\n\n // Check if a cell is selected\n const isCellSelected = useCallback((cellId: CellId) => selectedCells.has(cellId), [selectedCells])\n\n // Check if a cell is focused\n const isCellFocused = useCallback((cellId: CellId) => cellId === focusedCellId, [focusedCellId])\n\n // Get position from cell ID - using shared utility\n const getCellPositionFromId = useCallback((cellId: CellId) => parseCellId(cellId), [])\n\n // Get border classes for a cell based on its selection state and neighbors\n const getCellBorderClasses = useCallback(\n (cellId: CellId): string[] => {\n if (!isCellSelected(cellId)) return []\n\n const position = parseCellId(cellId)\n if (!position) return []\n\n const rowIndex = stableGridMap.rowIdToIndex.get(position.rowId)\n const colIndex = stableGridMap.colIdToIndex.get(position.colId)\n\n if (rowIndex === undefined || colIndex === undefined) return []\n\n // Check if the cell's neighbors in all four directions are selected\n const top = stableGridMap.indexToRowId.get(rowIndex - 1)\n const right = stableGridMap.indexToColId.get(colIndex + 1)\n const bottom = stableGridMap.indexToRowId.get(rowIndex + 1)\n const left = stableGridMap.indexToColId.get(colIndex - 1)\n\n // Default to no borders\n let borderPos = BorderPosition.None\n\n // Top edge check: show border if we're at the top of the grid or the cell above is not selected\n if (!top || !selectedCells.has(getCellId(top, position.colId))) {\n borderPos |= BorderPosition.Top\n }\n\n // Right edge check: show border if we're at the right edge of the grid or the cell to the right is not selected\n if (!right || !selectedCells.has(getCellId(position.rowId, right))) {\n borderPos |= BorderPosition.Right\n }\n\n // Bottom edge check: show border if we're at the bottom of the grid or the cell below is not selected\n if (!bottom || !selectedCells.has(getCellId(bottom, position.colId))) {\n borderPos |= BorderPosition.Bottom\n }\n\n // Left edge check: show border if we're at the left edge of the grid or the cell to the left is not selected\n if (!left || !selectedCells.has(getCellId(position.rowId, left))) {\n borderPos |= BorderPosition.Left\n }\n\n return getBorderClasses(borderPos)\n },\n [selectedCells, stableGridMap, isCellSelected],\n )\n\n // Memoize context value to prevent unnecessary re-renders\n const value = useMemo(\n () => ({\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n gridMap: stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n }),\n [\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n ],\n )\n\n return <SelectionCellsContext.Provider value={value}>{children}</SelectionCellsContext.Provider>\n}\n"],"names":["SelectionCellsProvider","children","selectedCells","setSelectedCells","useState","focusedCellId","setFocusedCellId","selectionInProgress","setSelectionInProgress","anchorCell","setAnchorCell","gridMap","setGridMap","mapToString","map","stableGridMap","useMemo","initialCellSelected","useRef","selectedRows","cellId","parseCellId","ROW_SELECTION_COLUMN_ID","useCheckSelectedCellsVisible","isAdditiveSelectionRef","registerGrid","useCallback","rows","columns","rowIdToIndex","colIdToIndex","indexToRowId","indexToColId","rowId","index","colId","updateSelection","selection","position","prevSelectedCells","newSelection","DRAG_HANDLE_COLUMN_ID","rowSelection","id","selectCellRange","start","end","additive","startRowIdx","startColIdx","endRowIdx","endColIdx","minRowIdx","maxRowIdx","minColIdx","maxColIdx","r","c","getCellId","startSelection","prev","extendSelection","isRowSelectionColumn","currentPosition","endSelection","selectCell","range","focusCell","clearSelection","isCellSelected","isCellFocused","getCellPositionFromId","getCellBorderClasses","rowIndex","colIndex","top","right","bottom","left","borderPos","BorderPosition","getBorderClasses","value","jsx","SelectionCellsContext"],"mappings":"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"}
@@ -147,6 +147,10 @@ import "../../../api/queries/views/getViews.es.js";
147
147
  import "../../../api/queries/views/updateViews.es.js";
148
148
  import "../../../api/queries/watchers/getWatchers.es.js";
149
149
  import "../../../api/queries/uris/getUris.es.js";
150
+ import "../../../../../_virtual/index.es.js";
151
+ import "../../../../../node_modules/refractor/lib/common.es.js";
152
+ import "../../../../../node_modules/refractor/lib/all.es.js";
153
+ /* empty css */
150
154
  import "../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js";
151
155
  import "../../../components/DetailsPanelDetails/DetailsPanelDetails.es.js";
152
156
  import "../../../components/DetailsPanelDetails/DetailsSection.es.js";
@@ -264,7 +268,7 @@ import "../widgets/ErrorWidget.es.js";
264
268
  import "../ProjectTreeTable.styled.es.js";
265
269
  import "../widgets/LoadMoreWidget.es.js";
266
270
  import { useCheckSelectedCellsVisible as mo } from "../hooks/useCheckSelectedCellsVisible.es.js";
267
- const rp = ({ children: Q }) => {
271
+ const ep = ({ children: Q }) => {
268
272
  const [p, f] = g(/* @__PURE__ */ new Set()), [u, c] = g(null), [M, L] = g(!1), [w, x] = g(null), [S, X] = g({
269
273
  rowIdToIndex: /* @__PURE__ */ new Map(),
270
274
  colIdToIndex: /* @__PURE__ */ new Map(),
@@ -429,6 +433,6 @@ const rp = ({ children: Q }) => {
429
433
  return /* @__PURE__ */ oo.jsx(io.Provider, { value: Y, children: Q });
430
434
  };
431
435
  export {
432
- rp as SelectionCellsProvider
436
+ ep as SelectionCellsProvider
433
437
  };
434
438
  //# sourceMappingURL=SelectionCellsProvider.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionCellsProvider.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/SelectionCellsProvider.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo, useRef, useState } from 'react'\nimport {\n BorderPosition,\n CellId,\n CellPosition,\n ColId,\n getBorderClasses,\n getCellId,\n parseCellId,\n RowId,\n} from '../utils/cellUtils'\nimport { DRAG_HANDLE_COLUMN_ID } from '../ProjectTreeTable'\nimport { GridMap, ROW_SELECTION_COLUMN_ID, SelectionCellsContext } from './SelectionCellsContext'\nimport { useCheckSelectedCellsVisible } from '../hooks'\n\nexport const SelectionCellsProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [selectedCells, setSelectedCells] = useState<Set<CellId>>(new Set())\n const [focusedCellId, setFocusedCellId] = useState<CellId | null>(null)\n const [selectionInProgress, setSelectionInProgress] = useState<boolean>(false)\n const [anchorCell, setAnchorCell] = useState<CellPosition | null>(null)\n const [gridMap, setGridMap] = useState<GridMap>({\n rowIdToIndex: new Map(),\n colIdToIndex: new Map(),\n indexToRowId: new Map(),\n indexToColId: new Map(),\n })\n const mapToString = (map: Map<any, any>) => {\n return JSON.stringify(Array.from(map.entries()))\n }\n\n const stableGridMap = useMemo(\n () => gridMap,\n [\n mapToString(gridMap.rowIdToIndex),\n mapToString(gridMap.colIdToIndex),\n mapToString(gridMap.indexToRowId),\n mapToString(gridMap.indexToColId),\n ],\n )\n // Track whether we're selecting or unselecting during drag\n const initialCellSelected = useRef<boolean>(false)\n\n const selectedRows = useMemo(\n () =>\n Array.from(selectedCells)\n .filter(\n (cellId) =>\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID && parseCellId(cellId)?.rowId,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[],\n [selectedCells],\n )\n\n useCheckSelectedCellsVisible({\n selectedCells,\n setSelectedCells,\n focusedCellId,\n setFocusedCellId,\n })\n const isAdditiveSelectionRef = useRef<boolean>(false)\n // Register grid structure for range selections\n const registerGrid = useCallback((rows: RowId[], columns: ColId[]) => {\n const rowIdToIndex = new Map<RowId, number>()\n const colIdToIndex = new Map<ColId, number>()\n const indexToRowId = new Map<number, RowId>()\n const indexToColId = new Map<number, ColId>()\n\n rows.forEach((rowId, index) => {\n rowIdToIndex.set(rowId, index)\n indexToRowId.set(index, rowId)\n })\n\n columns.forEach((colId, index) => {\n colIdToIndex.set(colId, index)\n indexToColId.set(index, colId)\n })\n\n setGridMap({ rowIdToIndex, colIdToIndex, indexToRowId, indexToColId })\n }, [])\n\n // update the selection whilst properly handling the row-selection column\n const updateSelection = useCallback((selection: Set<CellId>, position: CellPosition) => {\n setSelectedCells((prevSelectedCells) => {\n let newSelection = new Set(selection)\n if (position.colId !== ROW_SELECTION_COLUMN_ID && position.colId !== DRAG_HANDLE_COLUMN_ID) {\n const rowSelection = Array.from(prevSelectedCells).filter(\n (id) => parseCellId(id)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n if (rowSelection.length) {\n newSelection = new Set([...newSelection, ...rowSelection])\n }\n }\n return newSelection\n })\n }, [])\n\n // Select cells between two points in the grid\n const selectCellRange = useCallback(\n (start: CellPosition, end: CellPosition, additive: boolean): Set<CellId> => {\n if (!additive) {\n // Clear existing selection if not additive\n updateSelection(new Set(), start)\n }\n\n const startRowIdx = stableGridMap.rowIdToIndex.get(start.rowId) ?? 0\n const startColIdx = stableGridMap.colIdToIndex.get(start.colId) ?? 0\n const endRowIdx = stableGridMap.rowIdToIndex.get(end.rowId) ?? 0\n const endColIdx = stableGridMap.colIdToIndex.get(end.colId) ?? 0\n\n const minRowIdx = Math.min(startRowIdx, endRowIdx)\n const maxRowIdx = Math.max(startRowIdx, endRowIdx)\n const minColIdx = Math.min(startColIdx, endColIdx)\n const maxColIdx = Math.max(startColIdx, endColIdx)\n\n const newSelection = new Set(additive ? selectedCells : [])\n\n for (let r = minRowIdx; r <= maxRowIdx; r++) {\n const rowId = stableGridMap.indexToRowId.get(r)\n if (!rowId) continue\n\n for (let c = minColIdx; c <= maxColIdx; c++) {\n const colId = stableGridMap.indexToColId.get(c)\n if (!colId) continue\n\n newSelection.add(getCellId(rowId, colId))\n }\n }\n\n return newSelection\n },\n [stableGridMap, selectedCells, updateSelection],\n )\n\n // Start a selection operation\n const startSelection = useCallback(\n (cellId: CellId, additive: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n setSelectionInProgress(true)\n isAdditiveSelectionRef.current = additive\n // Store whether the initial cell was selected to determine drag behavior\n initialCellSelected.current = selectedCells.has(cellId)\n\n if (additive) {\n // Toggle this cell in multi-select mode\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n // If this was the focused cell, set focus to another cell in the selection or null\n if (focusedCellId === cellId) {\n if (newSelection.size > 0) {\n setFocusedCellId(Array.from(newSelection)[Array.from(newSelection).length - 1])\n } else {\n setFocusedCellId(null)\n }\n }\n } else {\n newSelection.add(cellId)\n setFocusedCellId(cellId)\n setAnchorCell(position)\n }\n return newSelection\n })\n } else {\n // Single cell selection\n // If this cell is already the only selected cell, deselect it\n // and it is from name column\n if (\n selectedCells.size === 1 &&\n selectedCells.has(cellId) &&\n [ROW_SELECTION_COLUMN_ID, 'name'].includes(position.colId)\n ) {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n } else {\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n setFocusedCellId(cellId)\n }\n }\n },\n [selectedCells, focusedCellId, updateSelection],\n )\n\n // Extend the current selection during drag\n const extendSelection = useCallback(\n (cellId: CellId, isRowSelectionColumn?: boolean) => {\n if (!selectionInProgress || !anchorCell) return\n\n const currentPosition = parseCellId(cellId)\n if (!currentPosition) return\n\n if (isRowSelectionColumn) {\n // Handle row selection column differently during drag\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n const position = parseCellId(cellId)\n\n if (!position) return newSelection\n\n // We're either selecting or unselecting based on the initial cell's state\n if (initialCellSelected.current) {\n // If we started on a selected cell, we're removing cells during drag\n newSelection.delete(cellId)\n } else {\n // If we started on an unselected cell, we're adding cells during drag\n newSelection.add(cellId)\n }\n\n return newSelection\n })\n } else {\n if (isAdditiveSelectionRef.current) return\n // For normal cells - ALWAYS does range selection\n const newSelection = selectCellRange(anchorCell, currentPosition, isAdditiveSelectionRef.current,)\n updateSelection(newSelection, currentPosition)\n }\n },\n [selectionInProgress, anchorCell, selectCellRange, updateSelection],\n )\n\n // End a selection operation\n const endSelection = useCallback(() => {\n setSelectionInProgress(false)\n }, [])\n\n // Select a cell (click or programmatically)\n const selectCell = useCallback(\n (cellId: CellId, additive: boolean, range: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n if (range && anchorCell) {\n // Shift+click for range selection - select cells between anchor and current\n const newSelection = selectCellRange(anchorCell, position, additive)\n updateSelection(newSelection, position)\n } else if (additive) {\n // Ctrl/Cmd+click for toggling selection\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n } else {\n newSelection.add(cellId)\n }\n return newSelection\n })\n } else {\n // Normal click - select just this cell and set as new anchor\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n }\n },\n [anchorCell, selectCellRange, updateSelection],\n )\n\n // Focus a cell without changing selection\n const focusCell = useCallback((cellId: CellId | null) => {\n setFocusedCellId(cellId)\n }, [])\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n }, [])\n\n // Check if a cell is selected\n const isCellSelected = useCallback((cellId: CellId) => selectedCells.has(cellId), [selectedCells])\n\n // Check if a cell is focused\n const isCellFocused = useCallback((cellId: CellId) => cellId === focusedCellId, [focusedCellId])\n\n // Get position from cell ID - using shared utility\n const getCellPositionFromId = useCallback((cellId: CellId) => parseCellId(cellId), [])\n\n // Get border classes for a cell based on its selection state and neighbors\n const getCellBorderClasses = useCallback(\n (cellId: CellId): string[] => {\n if (!isCellSelected(cellId)) return []\n\n const position = parseCellId(cellId)\n if (!position) return []\n\n const rowIndex = stableGridMap.rowIdToIndex.get(position.rowId)\n const colIndex = stableGridMap.colIdToIndex.get(position.colId)\n\n if (rowIndex === undefined || colIndex === undefined) return []\n\n // Check if the cell's neighbors in all four directions are selected\n const top = stableGridMap.indexToRowId.get(rowIndex - 1)\n const right = stableGridMap.indexToColId.get(colIndex + 1)\n const bottom = stableGridMap.indexToRowId.get(rowIndex + 1)\n const left = stableGridMap.indexToColId.get(colIndex - 1)\n\n // Default to no borders\n let borderPos = BorderPosition.None\n\n // Top edge check: show border if we're at the top of the grid or the cell above is not selected\n if (!top || !selectedCells.has(getCellId(top, position.colId))) {\n borderPos |= BorderPosition.Top\n }\n\n // Right edge check: show border if we're at the right edge of the grid or the cell to the right is not selected\n if (!right || !selectedCells.has(getCellId(position.rowId, right))) {\n borderPos |= BorderPosition.Right\n }\n\n // Bottom edge check: show border if we're at the bottom of the grid or the cell below is not selected\n if (!bottom || !selectedCells.has(getCellId(bottom, position.colId))) {\n borderPos |= BorderPosition.Bottom\n }\n\n // Left edge check: show border if we're at the left edge of the grid or the cell to the left is not selected\n if (!left || !selectedCells.has(getCellId(position.rowId, left))) {\n borderPos |= BorderPosition.Left\n }\n\n return getBorderClasses(borderPos)\n },\n [selectedCells, stableGridMap, isCellSelected],\n )\n\n // Memoize context value to prevent unnecessary re-renders\n const value = useMemo(\n () => ({\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n gridMap: stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n }),\n [\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n ],\n )\n\n return <SelectionCellsContext.Provider value={value}>{children}</SelectionCellsContext.Provider>\n}\n"],"names":["SelectionCellsProvider","children","selectedCells","setSelectedCells","useState","focusedCellId","setFocusedCellId","selectionInProgress","setSelectionInProgress","anchorCell","setAnchorCell","gridMap","setGridMap","mapToString","map","stableGridMap","useMemo","initialCellSelected","useRef","selectedRows","cellId","parseCellId","ROW_SELECTION_COLUMN_ID","useCheckSelectedCellsVisible","isAdditiveSelectionRef","registerGrid","useCallback","rows","columns","rowIdToIndex","colIdToIndex","indexToRowId","indexToColId","rowId","index","colId","updateSelection","selection","position","prevSelectedCells","newSelection","DRAG_HANDLE_COLUMN_ID","rowSelection","id","selectCellRange","start","end","additive","startRowIdx","startColIdx","endRowIdx","endColIdx","minRowIdx","maxRowIdx","minColIdx","maxColIdx","r","c","getCellId","startSelection","prev","extendSelection","isRowSelectionColumn","currentPosition","endSelection","selectCell","range","focusCell","clearSelection","isCellSelected","isCellFocused","getCellPositionFromId","getCellBorderClasses","rowIndex","colIndex","top","right","bottom","left","borderPos","BorderPosition","getBorderClasses","value","jsx","SelectionCellsContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeO,MAAMA,KAA4D,CAAC,EAAE,UAAAC,QAAe;AACzF,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAsB,oBAAI,KAAK,GACnE,CAACC,GAAeC,CAAgB,IAAIF,EAAwB,IAAI,GAChE,CAACG,GAAqBC,CAAsB,IAAIJ,EAAkB,EAAK,GACvE,CAACK,GAAYC,CAAa,IAAIN,EAA8B,IAAI,GAChE,CAACO,GAASC,CAAU,IAAIR,EAAkB;AAAA,IAC9C,kCAAkB,IAAA;AAAA,IAClB,kCAAkB,IAAA;AAAA,IAClB,kCAAkB,IAAA;AAAA,IAClB,kCAAkB,IAAA;AAAA,EAAI,CACvB,GACKS,IAAc,CAACC,MACZ,KAAK,UAAU,MAAM,KAAKA,EAAI,QAAA,CAAS,CAAC,GAG3CC,IAAgBC;AAAA,IACpB,MAAML;AAAA,IACN;AAAA,MACEE,EAAYF,EAAQ,YAAY;AAAA,MAChCE,EAAYF,EAAQ,YAAY;AAAA,MAChCE,EAAYF,EAAQ,YAAY;AAAA,MAChCE,EAAYF,EAAQ,YAAY;AAAA,IAAA;AAAA,EAClC,GAGIM,IAAsBC,EAAgB,EAAK,GAE3CC,IAAeH;AAAA,IACnB,MACE,MAAM,KAAKd,CAAa,EACrB;AAAA,MACC,CAACkB,MACCC,EAAYD,CAAM,GAAG,UAAUE,KAA2BD,EAAYD,CAAM,GAAG;AAAA,IAAA,EAElF,IAAI,CAACA,MAAWC,EAAYD,CAAM,GAAG,KAAK;AAAA,IAC/C,CAAClB,CAAa;AAAA,EAAA;AAGhB,EAAAqB,GAA6B;AAAA,IAC3B,eAAArB;AAAA,IACA,kBAAAC;AAAA,IACA,eAAAE;AAAA,IACA,kBAAAC;AAAA,EAAA,CACD;AACD,QAAMkB,IAAyBN,EAAgB,EAAK,GAE9CO,IAAeC,EAAY,CAACC,GAAeC,MAAqB;AACpE,UAAMC,wBAAmB,IAAA,GACnBC,wBAAmB,IAAA,GACnBC,wBAAmB,IAAA,GACnBC,wBAAmB,IAAA;AAEzB,IAAAL,EAAK,QAAQ,CAACM,GAAOC,MAAU;AAC7B,MAAAL,EAAa,IAAII,GAAOC,CAAK,GAC7BH,EAAa,IAAIG,GAAOD,CAAK;AAAA,IAC/B,CAAC,GAEDL,EAAQ,QAAQ,CAACO,GAAOD,MAAU;AAChC,MAAAJ,EAAa,IAAIK,GAAOD,CAAK,GAC7BF,EAAa,IAAIE,GAAOC,CAAK;AAAA,IAC/B,CAAC,GAEDvB,EAAW,EAAE,cAAAiB,GAAc,cAAAC,GAAc,cAAAC,GAAc,cAAAC,GAAc;AAAA,EACvE,GAAG,CAAA,CAAE,GAGCI,IAAkBV,EAAY,CAACW,GAAwBC,MAA2B;AACtF,IAAAnC,EAAiB,CAACoC,MAAsB;AACtC,UAAIC,IAAe,IAAI,IAAIH,CAAS;AACpC,UAAIC,EAAS,UAAUhB,KAA2BgB,EAAS,UAAUG,IAAuB;AAC1F,cAAMC,IAAe,MAAM,KAAKH,CAAiB,EAAE;AAAA,UACjD,CAACI,MAAOtB,EAAYsB,CAAE,GAAG,UAAUrB;AAAA,QAAA;AAErC,QAAIoB,EAAa,WACfF,wBAAmB,IAAI,CAAC,GAAGA,GAAc,GAAGE,CAAY,CAAC;AAAA,MAE7D;AACA,aAAOF;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAA,CAAE,GAGCI,IAAkBlB;AAAA,IACtB,CAACmB,GAAqBC,GAAmBC,MAAmC;AAC1E,MAAKA,KAEHX,EAAgB,oBAAI,IAAA,GAAOS,CAAK;AAGlC,YAAMG,IAAcjC,EAAc,aAAa,IAAI8B,EAAM,KAAK,KAAK,GAC7DI,IAAclC,EAAc,aAAa,IAAI8B,EAAM,KAAK,KAAK,GAC7DK,IAAYnC,EAAc,aAAa,IAAI+B,EAAI,KAAK,KAAK,GACzDK,IAAYpC,EAAc,aAAa,IAAI+B,EAAI,KAAK,KAAK,GAEzDM,IAAY,KAAK,IAAIJ,GAAaE,CAAS,GAC3CG,IAAY,KAAK,IAAIL,GAAaE,CAAS,GAC3CI,IAAY,KAAK,IAAIL,GAAaE,CAAS,GAC3CI,IAAY,KAAK,IAAIN,GAAaE,CAAS,GAE3CX,IAAe,IAAI,IAAIO,IAAW7C,IAAgB,CAAA,CAAE;AAE1D,eAASsD,IAAIJ,GAAWI,KAAKH,GAAWG,KAAK;AAC3C,cAAMvB,IAAQlB,EAAc,aAAa,IAAIyC,CAAC;AAC9C,YAAKvB;AAEL,mBAASwB,IAAIH,GAAWG,KAAKF,GAAWE,KAAK;AAC3C,kBAAMtB,IAAQpB,EAAc,aAAa,IAAI0C,CAAC;AAC9C,YAAKtB,KAELK,EAAa,IAAIkB,EAAUzB,GAAOE,CAAK,CAAC;AAAA,UAC1C;AAAA,MACF;AAEA,aAAOK;AAAA,IACT;AAAA,IACA,CAACzB,GAAeb,GAAekC,CAAe;AAAA,EAAA,GAI1CuB,IAAiBjC;AAAA,IACrB,CAACN,GAAgB2B,MAAsB;AACrC,YAAMT,IAAWjB,EAAYD,CAAM;AACnC,MAAKkB,MAEL9B,EAAuB,EAAI,GAC3BgB,EAAuB,UAAUuB,GAEjC9B,EAAoB,UAAUf,EAAc,IAAIkB,CAAM,GAElD2B,IAEF5C,EAAiB,CAACyD,MAAS;AACzB,cAAMpB,IAAe,IAAI,IAAIoB,CAAI;AACjC,eAAIpB,EAAa,IAAIpB,CAAM,KACzBoB,EAAa,OAAOpB,CAAM,GAEtBf,MAAkBe,MAChBoB,EAAa,OAAO,IACtBlC,EAAiB,MAAM,KAAKkC,CAAY,EAAE,MAAM,KAAKA,CAAY,EAAE,SAAS,CAAC,CAAC,IAE9ElC,EAAiB,IAAI,OAIzBkC,EAAa,IAAIpB,CAAM,GACvBd,EAAiBc,CAAM,GACvBV,EAAc4B,CAAQ,IAEjBE;AAAA,MACT,CAAC,IAMCtC,EAAc,SAAS,KACvBA,EAAc,IAAIkB,CAAM,KACxB,CAACE,GAAyB,MAAM,EAAE,SAASgB,EAAS,KAAK,KAEzDnC,EAAiB,oBAAI,KAAK,GAC1BO,EAAc,IAAI,GAClBJ,EAAiB,IAAI,MAErB8B,sBAAoB,IAAI,CAAChB,CAAM,CAAC,GAAGkB,CAAQ,GAC3C5B,EAAc4B,CAAQ,GACtBhC,EAAiBc,CAAM;AAAA,IAG7B;AAAA,IACA,CAAClB,GAAeG,GAAe+B,CAAe;AAAA,EAAA,GAI1CyB,IAAkBnC;AAAA,IACtB,CAACN,GAAgB0C,MAAmC;AAClD,UAAI,CAACvD,KAAuB,CAACE,EAAY;AAEzC,YAAMsD,IAAkB1C,EAAYD,CAAM;AAC1C,UAAK2C;AAEL,YAAID;AAEF,UAAA3D,EAAiB,CAACyD,MAAS;AACzB,kBAAMpB,IAAe,IAAI,IAAIoB,CAAI;AAGjC,mBAFiBvC,EAAYD,CAAM,MAK/BH,EAAoB,UAEtBuB,EAAa,OAAOpB,CAAM,IAG1BoB,EAAa,IAAIpB,CAAM,IAGlBoB;AAAA,UACT,CAAC;AAAA,aACI;AACL,cAAIhB,EAAuB,QAAS;AAEpC,gBAAMgB,IAAeI,EAAgBnC,GAAYsD,GAAiBvC,EAAuB,OAAQ;AACjG,UAAAY,EAAgBI,GAAcuB,CAAe;AAAA,QAC/C;AAAA,IACF;AAAA,IACA,CAACxD,GAAqBE,GAAYmC,GAAiBR,CAAe;AAAA,EAAA,GAI9D4B,IAAetC,EAAY,MAAM;AACrC,IAAAlB,EAAuB,EAAK;AAAA,EAC9B,GAAG,CAAA,CAAE,GAGCyD,IAAavC;AAAA,IACjB,CAACN,GAAgB2B,GAAmBmB,MAAmB;AACrD,YAAM5B,IAAWjB,EAAYD,CAAM;AACnC,UAAKkB;AAEL,YAAI4B,KAASzD,GAAY;AAEvB,gBAAM+B,IAAeI,EAAgBnC,GAAY6B,GAAUS,CAAQ;AACnE,UAAAX,EAAgBI,GAAcF,CAAQ;AAAA,QACxC,OAAWS,IAET5C,EAAiB,CAACyD,MAAS;AACzB,gBAAMpB,IAAe,IAAI,IAAIoB,CAAI;AACjC,iBAAIpB,EAAa,IAAIpB,CAAM,IACzBoB,EAAa,OAAOpB,CAAM,IAE1BoB,EAAa,IAAIpB,CAAM,GAElBoB;AAAA,QACT,CAAC,KAGDJ,sBAAoB,IAAI,CAAChB,CAAM,CAAC,GAAGkB,CAAQ,GAC3C5B,EAAc4B,CAAQ;AAAA,IAE1B;AAAA,IACA,CAAC7B,GAAYmC,GAAiBR,CAAe;AAAA,EAAA,GAIzC+B,IAAYzC,EAAY,CAACN,MAA0B;AACvD,IAAAd,EAAiBc,CAAM;AAAA,EACzB,GAAG,CAAA,CAAE,GAGCgD,IAAiB1C,EAAY,MAAM;AACvC,IAAAvB,EAAiB,oBAAI,KAAK,GAC1BO,EAAc,IAAI,GAClBJ,EAAiB,IAAI;AAAA,EACvB,GAAG,CAAA,CAAE,GAGC+D,IAAiB3C,EAAY,CAACN,MAAmBlB,EAAc,IAAIkB,CAAM,GAAG,CAAClB,CAAa,CAAC,GAG3FoE,IAAgB5C,EAAY,CAACN,MAAmBA,MAAWf,GAAe,CAACA,CAAa,CAAC,GAGzFkE,IAAwB7C,EAAY,CAACN,MAAmBC,EAAYD,CAAM,GAAG,EAAE,GAG/EoD,IAAuB9C;AAAA,IAC3B,CAACN,MAA6B;AAC5B,UAAI,CAACiD,EAAejD,CAAM,UAAU,CAAA;AAEpC,YAAMkB,IAAWjB,EAAYD,CAAM;AACnC,UAAI,CAACkB,EAAU,QAAO,CAAA;AAEtB,YAAMmC,IAAW1D,EAAc,aAAa,IAAIuB,EAAS,KAAK,GACxDoC,IAAW3D,EAAc,aAAa,IAAIuB,EAAS,KAAK;AAE9D,UAAImC,MAAa,UAAaC,MAAa,eAAkB,CAAA;AAG7D,YAAMC,IAAM5D,EAAc,aAAa,IAAI0D,IAAW,CAAC,GACjDG,IAAQ7D,EAAc,aAAa,IAAI2D,IAAW,CAAC,GACnDG,IAAS9D,EAAc,aAAa,IAAI0D,IAAW,CAAC,GACpDK,IAAO/D,EAAc,aAAa,IAAI2D,IAAW,CAAC;AAGxD,UAAIK,IAAYC,EAAe;AAG/B,cAAI,CAACL,KAAO,CAACzE,EAAc,IAAIwD,EAAUiB,GAAKrC,EAAS,KAAK,CAAC,OAC3DyC,KAAaC,EAAe,OAI1B,CAACJ,KAAS,CAAC1E,EAAc,IAAIwD,EAAUpB,EAAS,OAAOsC,CAAK,CAAC,OAC/DG,KAAaC,EAAe,SAI1B,CAACH,KAAU,CAAC3E,EAAc,IAAIwD,EAAUmB,GAAQvC,EAAS,KAAK,CAAC,OACjEyC,KAAaC,EAAe,UAI1B,CAACF,KAAQ,CAAC5E,EAAc,IAAIwD,EAAUpB,EAAS,OAAOwC,CAAI,CAAC,OAC7DC,KAAaC,EAAe,OAGvBC,GAAiBF,CAAS;AAAA,IACnC;AAAA,IACA,CAAC7E,GAAea,GAAesD,CAAc;AAAA,EAAA,GAIzCa,IAAQlE;AAAA,IACZ,OAAO;AAAA,MACL,eAAAd;AAAA,MACA,cAAAiB;AAAA,MACA,eAAAd;AAAA,MACA,qBAAAE;AAAA,MACA,YAAAE;AAAA,MACA,SAASM;AAAA,MACT,kBAAAZ;AAAA,MACA,kBAAAG;AAAA,MACA,eAAAI;AAAA,MACA,cAAAe;AAAA,MACA,YAAAwC;AAAA,MACA,gBAAAN;AAAA,MACA,iBAAAE;AAAA,MACA,cAAAG;AAAA,MACA,WAAAG;AAAA,MACA,gBAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,eAAAC;AAAA,MACA,uBAAAC;AAAA,MACA,sBAAAC;AAAA,IAAA;AAAA,IAEF;AAAA,MACEtE;AAAA,MACAiB;AAAA,MACAd;AAAA,MACAE;AAAA,MACAE;AAAA,MACAM;AAAA,MACAZ;AAAA,MACAG;AAAA,MACAI;AAAA,MACAe;AAAA,MACAwC;AAAA,MACAN;AAAA,MACAE;AAAA,MACAG;AAAA,MACAG;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAAA,EACF;AAGF,SAAOW,gBAAAA,GAAAA,IAACC,GAAsB,UAAtB,EAA+B,OAAAF,GAAe,UAAAjF,EAAA,CAAS;AACjE;"}
1
+ {"version":3,"file":"SelectionCellsProvider.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/SelectionCellsProvider.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useMemo, useRef, useState } from 'react'\nimport {\n BorderPosition,\n CellId,\n CellPosition,\n ColId,\n getBorderClasses,\n getCellId,\n parseCellId,\n RowId,\n} from '../utils/cellUtils'\nimport { DRAG_HANDLE_COLUMN_ID } from '../ProjectTreeTable'\nimport { GridMap, ROW_SELECTION_COLUMN_ID, SelectionCellsContext } from './SelectionCellsContext'\nimport { useCheckSelectedCellsVisible } from '../hooks'\n\nexport const SelectionCellsProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [selectedCells, setSelectedCells] = useState<Set<CellId>>(new Set())\n const [focusedCellId, setFocusedCellId] = useState<CellId | null>(null)\n const [selectionInProgress, setSelectionInProgress] = useState<boolean>(false)\n const [anchorCell, setAnchorCell] = useState<CellPosition | null>(null)\n const [gridMap, setGridMap] = useState<GridMap>({\n rowIdToIndex: new Map(),\n colIdToIndex: new Map(),\n indexToRowId: new Map(),\n indexToColId: new Map(),\n })\n const mapToString = (map: Map<any, any>) => {\n return JSON.stringify(Array.from(map.entries()))\n }\n\n const stableGridMap = useMemo(\n () => gridMap,\n [\n mapToString(gridMap.rowIdToIndex),\n mapToString(gridMap.colIdToIndex),\n mapToString(gridMap.indexToRowId),\n mapToString(gridMap.indexToColId),\n ],\n )\n // Track whether we're selecting or unselecting during drag\n const initialCellSelected = useRef<boolean>(false)\n\n const selectedRows = useMemo(\n () =>\n Array.from(selectedCells)\n .filter(\n (cellId) =>\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID && parseCellId(cellId)?.rowId,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[],\n [selectedCells],\n )\n\n useCheckSelectedCellsVisible({\n selectedCells,\n setSelectedCells,\n focusedCellId,\n setFocusedCellId,\n })\n const isAdditiveSelectionRef = useRef<boolean>(false)\n // Register grid structure for range selections\n const registerGrid = useCallback((rows: RowId[], columns: ColId[]) => {\n const rowIdToIndex = new Map<RowId, number>()\n const colIdToIndex = new Map<ColId, number>()\n const indexToRowId = new Map<number, RowId>()\n const indexToColId = new Map<number, ColId>()\n\n rows.forEach((rowId, index) => {\n rowIdToIndex.set(rowId, index)\n indexToRowId.set(index, rowId)\n })\n\n columns.forEach((colId, index) => {\n colIdToIndex.set(colId, index)\n indexToColId.set(index, colId)\n })\n\n setGridMap({ rowIdToIndex, colIdToIndex, indexToRowId, indexToColId })\n }, [])\n\n // update the selection whilst properly handling the row-selection column\n const updateSelection = useCallback((selection: Set<CellId>, position: CellPosition) => {\n setSelectedCells((prevSelectedCells) => {\n let newSelection = new Set(selection)\n if (position.colId !== ROW_SELECTION_COLUMN_ID && position.colId !== DRAG_HANDLE_COLUMN_ID) {\n const rowSelection = Array.from(prevSelectedCells).filter(\n (id) => parseCellId(id)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n if (rowSelection.length) {\n newSelection = new Set([...newSelection, ...rowSelection])\n }\n }\n return newSelection\n })\n }, [])\n\n // Select cells between two points in the grid\n const selectCellRange = useCallback(\n (start: CellPosition, end: CellPosition, additive: boolean): Set<CellId> => {\n if (!additive) {\n // Clear existing selection if not additive\n updateSelection(new Set(), start)\n }\n\n const startRowIdx = stableGridMap.rowIdToIndex.get(start.rowId) ?? 0\n const startColIdx = stableGridMap.colIdToIndex.get(start.colId) ?? 0\n const endRowIdx = stableGridMap.rowIdToIndex.get(end.rowId) ?? 0\n const endColIdx = stableGridMap.colIdToIndex.get(end.colId) ?? 0\n\n const minRowIdx = Math.min(startRowIdx, endRowIdx)\n const maxRowIdx = Math.max(startRowIdx, endRowIdx)\n const minColIdx = Math.min(startColIdx, endColIdx)\n const maxColIdx = Math.max(startColIdx, endColIdx)\n\n const newSelection = new Set(additive ? selectedCells : [])\n\n for (let r = minRowIdx; r <= maxRowIdx; r++) {\n const rowId = stableGridMap.indexToRowId.get(r)\n if (!rowId) continue\n\n for (let c = minColIdx; c <= maxColIdx; c++) {\n const colId = stableGridMap.indexToColId.get(c)\n if (!colId) continue\n\n newSelection.add(getCellId(rowId, colId))\n }\n }\n\n return newSelection\n },\n [stableGridMap, selectedCells, updateSelection],\n )\n\n // Start a selection operation\n const startSelection = useCallback(\n (cellId: CellId, additive: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n setSelectionInProgress(true)\n isAdditiveSelectionRef.current = additive\n // Store whether the initial cell was selected to determine drag behavior\n initialCellSelected.current = selectedCells.has(cellId)\n\n if (additive) {\n // Toggle this cell in multi-select mode\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n // If this was the focused cell, set focus to another cell in the selection or null\n if (focusedCellId === cellId) {\n if (newSelection.size > 0) {\n setFocusedCellId(Array.from(newSelection)[Array.from(newSelection).length - 1])\n } else {\n setFocusedCellId(null)\n }\n }\n } else {\n newSelection.add(cellId)\n setFocusedCellId(cellId)\n setAnchorCell(position)\n }\n return newSelection\n })\n } else {\n // Single cell selection\n // If this cell is already the only selected cell, deselect it\n // and it is from name column\n if (\n selectedCells.size === 1 &&\n selectedCells.has(cellId) &&\n [ROW_SELECTION_COLUMN_ID, 'name'].includes(position.colId)\n ) {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n } else {\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n setFocusedCellId(cellId)\n }\n }\n },\n [selectedCells, focusedCellId, updateSelection],\n )\n\n // Extend the current selection during drag\n const extendSelection = useCallback(\n (cellId: CellId, isRowSelectionColumn?: boolean) => {\n if (!selectionInProgress || !anchorCell) return\n\n const currentPosition = parseCellId(cellId)\n if (!currentPosition) return\n\n if (isRowSelectionColumn) {\n // Handle row selection column differently during drag\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n const position = parseCellId(cellId)\n\n if (!position) return newSelection\n\n // We're either selecting or unselecting based on the initial cell's state\n if (initialCellSelected.current) {\n // If we started on a selected cell, we're removing cells during drag\n newSelection.delete(cellId)\n } else {\n // If we started on an unselected cell, we're adding cells during drag\n newSelection.add(cellId)\n }\n\n return newSelection\n })\n } else {\n if (isAdditiveSelectionRef.current) return\n // For normal cells - ALWAYS does range selection\n const newSelection = selectCellRange(anchorCell, currentPosition, isAdditiveSelectionRef.current,)\n updateSelection(newSelection, currentPosition)\n }\n },\n [selectionInProgress, anchorCell, selectCellRange, updateSelection],\n )\n\n // End a selection operation\n const endSelection = useCallback(() => {\n setSelectionInProgress(false)\n }, [])\n\n // Select a cell (click or programmatically)\n const selectCell = useCallback(\n (cellId: CellId, additive: boolean, range: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n if (range && anchorCell) {\n // Shift+click for range selection - select cells between anchor and current\n const newSelection = selectCellRange(anchorCell, position, additive)\n updateSelection(newSelection, position)\n } else if (additive) {\n // Ctrl/Cmd+click for toggling selection\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n } else {\n newSelection.add(cellId)\n }\n return newSelection\n })\n } else {\n // Normal click - select just this cell and set as new anchor\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n }\n },\n [anchorCell, selectCellRange, updateSelection],\n )\n\n // Focus a cell without changing selection\n const focusCell = useCallback((cellId: CellId | null) => {\n setFocusedCellId(cellId)\n }, [])\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n }, [])\n\n // Check if a cell is selected\n const isCellSelected = useCallback((cellId: CellId) => selectedCells.has(cellId), [selectedCells])\n\n // Check if a cell is focused\n const isCellFocused = useCallback((cellId: CellId) => cellId === focusedCellId, [focusedCellId])\n\n // Get position from cell ID - using shared utility\n const getCellPositionFromId = useCallback((cellId: CellId) => parseCellId(cellId), [])\n\n // Get border classes for a cell based on its selection state and neighbors\n const getCellBorderClasses = useCallback(\n (cellId: CellId): string[] => {\n if (!isCellSelected(cellId)) return []\n\n const position = parseCellId(cellId)\n if (!position) return []\n\n const rowIndex = stableGridMap.rowIdToIndex.get(position.rowId)\n const colIndex = stableGridMap.colIdToIndex.get(position.colId)\n\n if (rowIndex === undefined || colIndex === undefined) return []\n\n // Check if the cell's neighbors in all four directions are selected\n const top = stableGridMap.indexToRowId.get(rowIndex - 1)\n const right = stableGridMap.indexToColId.get(colIndex + 1)\n const bottom = stableGridMap.indexToRowId.get(rowIndex + 1)\n const left = stableGridMap.indexToColId.get(colIndex - 1)\n\n // Default to no borders\n let borderPos = BorderPosition.None\n\n // Top edge check: show border if we're at the top of the grid or the cell above is not selected\n if (!top || !selectedCells.has(getCellId(top, position.colId))) {\n borderPos |= BorderPosition.Top\n }\n\n // Right edge check: show border if we're at the right edge of the grid or the cell to the right is not selected\n if (!right || !selectedCells.has(getCellId(position.rowId, right))) {\n borderPos |= BorderPosition.Right\n }\n\n // Bottom edge check: show border if we're at the bottom of the grid or the cell below is not selected\n if (!bottom || !selectedCells.has(getCellId(bottom, position.colId))) {\n borderPos |= BorderPosition.Bottom\n }\n\n // Left edge check: show border if we're at the left edge of the grid or the cell to the left is not selected\n if (!left || !selectedCells.has(getCellId(position.rowId, left))) {\n borderPos |= BorderPosition.Left\n }\n\n return getBorderClasses(borderPos)\n },\n [selectedCells, stableGridMap, isCellSelected],\n )\n\n // Memoize context value to prevent unnecessary re-renders\n const value = useMemo(\n () => ({\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n gridMap: stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n }),\n [\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n ],\n )\n\n return <SelectionCellsContext.Provider value={value}>{children}</SelectionCellsContext.Provider>\n}\n"],"names":["SelectionCellsProvider","children","selectedCells","setSelectedCells","useState","focusedCellId","setFocusedCellId","selectionInProgress","setSelectionInProgress","anchorCell","setAnchorCell","gridMap","setGridMap","mapToString","map","stableGridMap","useMemo","initialCellSelected","useRef","selectedRows","cellId","parseCellId","ROW_SELECTION_COLUMN_ID","useCheckSelectedCellsVisible","isAdditiveSelectionRef","registerGrid","useCallback","rows","columns","rowIdToIndex","colIdToIndex","indexToRowId","indexToColId","rowId","index","colId","updateSelection","selection","position","prevSelectedCells","newSelection","DRAG_HANDLE_COLUMN_ID","rowSelection","id","selectCellRange","start","end","additive","startRowIdx","startColIdx","endRowIdx","endColIdx","minRowIdx","maxRowIdx","minColIdx","maxColIdx","r","c","getCellId","startSelection","prev","extendSelection","isRowSelectionColumn","currentPosition","endSelection","selectCell","range","focusCell","clearSelection","isCellSelected","isCellFocused","getCellPositionFromId","getCellBorderClasses","rowIndex","colIndex","top","right","bottom","left","borderPos","BorderPosition","getBorderClasses","value","jsx","SelectionCellsContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeO,MAAMA,KAA4D,CAAC,EAAE,UAAAC,QAAe;AACzF,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAsB,oBAAI,KAAK,GACnE,CAACC,GAAeC,CAAgB,IAAIF,EAAwB,IAAI,GAChE,CAACG,GAAqBC,CAAsB,IAAIJ,EAAkB,EAAK,GACvE,CAACK,GAAYC,CAAa,IAAIN,EAA8B,IAAI,GAChE,CAACO,GAASC,CAAU,IAAIR,EAAkB;AAAA,IAC9C,kCAAkB,IAAA;AAAA,IAClB,kCAAkB,IAAA;AAAA,IAClB,kCAAkB,IAAA;AAAA,IAClB,kCAAkB,IAAA;AAAA,EAAI,CACvB,GACKS,IAAc,CAACC,MACZ,KAAK,UAAU,MAAM,KAAKA,EAAI,QAAA,CAAS,CAAC,GAG3CC,IAAgBC;AAAA,IACpB,MAAML;AAAA,IACN;AAAA,MACEE,EAAYF,EAAQ,YAAY;AAAA,MAChCE,EAAYF,EAAQ,YAAY;AAAA,MAChCE,EAAYF,EAAQ,YAAY;AAAA,MAChCE,EAAYF,EAAQ,YAAY;AAAA,IAAA;AAAA,EAClC,GAGIM,IAAsBC,EAAgB,EAAK,GAE3CC,IAAeH;AAAA,IACnB,MACE,MAAM,KAAKd,CAAa,EACrB;AAAA,MACC,CAACkB,MACCC,EAAYD,CAAM,GAAG,UAAUE,KAA2BD,EAAYD,CAAM,GAAG;AAAA,IAAA,EAElF,IAAI,CAACA,MAAWC,EAAYD,CAAM,GAAG,KAAK;AAAA,IAC/C,CAAClB,CAAa;AAAA,EAAA;AAGhB,EAAAqB,GAA6B;AAAA,IAC3B,eAAArB;AAAA,IACA,kBAAAC;AAAA,IACA,eAAAE;AAAA,IACA,kBAAAC;AAAA,EAAA,CACD;AACD,QAAMkB,IAAyBN,EAAgB,EAAK,GAE9CO,IAAeC,EAAY,CAACC,GAAeC,MAAqB;AACpE,UAAMC,wBAAmB,IAAA,GACnBC,wBAAmB,IAAA,GACnBC,wBAAmB,IAAA,GACnBC,wBAAmB,IAAA;AAEzB,IAAAL,EAAK,QAAQ,CAACM,GAAOC,MAAU;AAC7B,MAAAL,EAAa,IAAII,GAAOC,CAAK,GAC7BH,EAAa,IAAIG,GAAOD,CAAK;AAAA,IAC/B,CAAC,GAEDL,EAAQ,QAAQ,CAACO,GAAOD,MAAU;AAChC,MAAAJ,EAAa,IAAIK,GAAOD,CAAK,GAC7BF,EAAa,IAAIE,GAAOC,CAAK;AAAA,IAC/B,CAAC,GAEDvB,EAAW,EAAE,cAAAiB,GAAc,cAAAC,GAAc,cAAAC,GAAc,cAAAC,GAAc;AAAA,EACvE,GAAG,CAAA,CAAE,GAGCI,IAAkBV,EAAY,CAACW,GAAwBC,MAA2B;AACtF,IAAAnC,EAAiB,CAACoC,MAAsB;AACtC,UAAIC,IAAe,IAAI,IAAIH,CAAS;AACpC,UAAIC,EAAS,UAAUhB,KAA2BgB,EAAS,UAAUG,IAAuB;AAC1F,cAAMC,IAAe,MAAM,KAAKH,CAAiB,EAAE;AAAA,UACjD,CAACI,MAAOtB,EAAYsB,CAAE,GAAG,UAAUrB;AAAA,QAAA;AAErC,QAAIoB,EAAa,WACfF,wBAAmB,IAAI,CAAC,GAAGA,GAAc,GAAGE,CAAY,CAAC;AAAA,MAE7D;AACA,aAAOF;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAA,CAAE,GAGCI,IAAkBlB;AAAA,IACtB,CAACmB,GAAqBC,GAAmBC,MAAmC;AAC1E,MAAKA,KAEHX,EAAgB,oBAAI,IAAA,GAAOS,CAAK;AAGlC,YAAMG,IAAcjC,EAAc,aAAa,IAAI8B,EAAM,KAAK,KAAK,GAC7DI,IAAclC,EAAc,aAAa,IAAI8B,EAAM,KAAK,KAAK,GAC7DK,IAAYnC,EAAc,aAAa,IAAI+B,EAAI,KAAK,KAAK,GACzDK,IAAYpC,EAAc,aAAa,IAAI+B,EAAI,KAAK,KAAK,GAEzDM,IAAY,KAAK,IAAIJ,GAAaE,CAAS,GAC3CG,IAAY,KAAK,IAAIL,GAAaE,CAAS,GAC3CI,IAAY,KAAK,IAAIL,GAAaE,CAAS,GAC3CI,IAAY,KAAK,IAAIN,GAAaE,CAAS,GAE3CX,IAAe,IAAI,IAAIO,IAAW7C,IAAgB,CAAA,CAAE;AAE1D,eAASsD,IAAIJ,GAAWI,KAAKH,GAAWG,KAAK;AAC3C,cAAMvB,IAAQlB,EAAc,aAAa,IAAIyC,CAAC;AAC9C,YAAKvB;AAEL,mBAASwB,IAAIH,GAAWG,KAAKF,GAAWE,KAAK;AAC3C,kBAAMtB,IAAQpB,EAAc,aAAa,IAAI0C,CAAC;AAC9C,YAAKtB,KAELK,EAAa,IAAIkB,EAAUzB,GAAOE,CAAK,CAAC;AAAA,UAC1C;AAAA,MACF;AAEA,aAAOK;AAAA,IACT;AAAA,IACA,CAACzB,GAAeb,GAAekC,CAAe;AAAA,EAAA,GAI1CuB,IAAiBjC;AAAA,IACrB,CAACN,GAAgB2B,MAAsB;AACrC,YAAMT,IAAWjB,EAAYD,CAAM;AACnC,MAAKkB,MAEL9B,EAAuB,EAAI,GAC3BgB,EAAuB,UAAUuB,GAEjC9B,EAAoB,UAAUf,EAAc,IAAIkB,CAAM,GAElD2B,IAEF5C,EAAiB,CAACyD,MAAS;AACzB,cAAMpB,IAAe,IAAI,IAAIoB,CAAI;AACjC,eAAIpB,EAAa,IAAIpB,CAAM,KACzBoB,EAAa,OAAOpB,CAAM,GAEtBf,MAAkBe,MAChBoB,EAAa,OAAO,IACtBlC,EAAiB,MAAM,KAAKkC,CAAY,EAAE,MAAM,KAAKA,CAAY,EAAE,SAAS,CAAC,CAAC,IAE9ElC,EAAiB,IAAI,OAIzBkC,EAAa,IAAIpB,CAAM,GACvBd,EAAiBc,CAAM,GACvBV,EAAc4B,CAAQ,IAEjBE;AAAA,MACT,CAAC,IAMCtC,EAAc,SAAS,KACvBA,EAAc,IAAIkB,CAAM,KACxB,CAACE,GAAyB,MAAM,EAAE,SAASgB,EAAS,KAAK,KAEzDnC,EAAiB,oBAAI,KAAK,GAC1BO,EAAc,IAAI,GAClBJ,EAAiB,IAAI,MAErB8B,sBAAoB,IAAI,CAAChB,CAAM,CAAC,GAAGkB,CAAQ,GAC3C5B,EAAc4B,CAAQ,GACtBhC,EAAiBc,CAAM;AAAA,IAG7B;AAAA,IACA,CAAClB,GAAeG,GAAe+B,CAAe;AAAA,EAAA,GAI1CyB,IAAkBnC;AAAA,IACtB,CAACN,GAAgB0C,MAAmC;AAClD,UAAI,CAACvD,KAAuB,CAACE,EAAY;AAEzC,YAAMsD,IAAkB1C,EAAYD,CAAM;AAC1C,UAAK2C;AAEL,YAAID;AAEF,UAAA3D,EAAiB,CAACyD,MAAS;AACzB,kBAAMpB,IAAe,IAAI,IAAIoB,CAAI;AAGjC,mBAFiBvC,EAAYD,CAAM,MAK/BH,EAAoB,UAEtBuB,EAAa,OAAOpB,CAAM,IAG1BoB,EAAa,IAAIpB,CAAM,IAGlBoB;AAAA,UACT,CAAC;AAAA,aACI;AACL,cAAIhB,EAAuB,QAAS;AAEpC,gBAAMgB,IAAeI,EAAgBnC,GAAYsD,GAAiBvC,EAAuB,OAAQ;AACjG,UAAAY,EAAgBI,GAAcuB,CAAe;AAAA,QAC/C;AAAA,IACF;AAAA,IACA,CAACxD,GAAqBE,GAAYmC,GAAiBR,CAAe;AAAA,EAAA,GAI9D4B,IAAetC,EAAY,MAAM;AACrC,IAAAlB,EAAuB,EAAK;AAAA,EAC9B,GAAG,CAAA,CAAE,GAGCyD,IAAavC;AAAA,IACjB,CAACN,GAAgB2B,GAAmBmB,MAAmB;AACrD,YAAM5B,IAAWjB,EAAYD,CAAM;AACnC,UAAKkB;AAEL,YAAI4B,KAASzD,GAAY;AAEvB,gBAAM+B,IAAeI,EAAgBnC,GAAY6B,GAAUS,CAAQ;AACnE,UAAAX,EAAgBI,GAAcF,CAAQ;AAAA,QACxC,OAAWS,IAET5C,EAAiB,CAACyD,MAAS;AACzB,gBAAMpB,IAAe,IAAI,IAAIoB,CAAI;AACjC,iBAAIpB,EAAa,IAAIpB,CAAM,IACzBoB,EAAa,OAAOpB,CAAM,IAE1BoB,EAAa,IAAIpB,CAAM,GAElBoB;AAAA,QACT,CAAC,KAGDJ,sBAAoB,IAAI,CAAChB,CAAM,CAAC,GAAGkB,CAAQ,GAC3C5B,EAAc4B,CAAQ;AAAA,IAE1B;AAAA,IACA,CAAC7B,GAAYmC,GAAiBR,CAAe;AAAA,EAAA,GAIzC+B,IAAYzC,EAAY,CAACN,MAA0B;AACvD,IAAAd,EAAiBc,CAAM;AAAA,EACzB,GAAG,CAAA,CAAE,GAGCgD,IAAiB1C,EAAY,MAAM;AACvC,IAAAvB,EAAiB,oBAAI,KAAK,GAC1BO,EAAc,IAAI,GAClBJ,EAAiB,IAAI;AAAA,EACvB,GAAG,CAAA,CAAE,GAGC+D,IAAiB3C,EAAY,CAACN,MAAmBlB,EAAc,IAAIkB,CAAM,GAAG,CAAClB,CAAa,CAAC,GAG3FoE,IAAgB5C,EAAY,CAACN,MAAmBA,MAAWf,GAAe,CAACA,CAAa,CAAC,GAGzFkE,IAAwB7C,EAAY,CAACN,MAAmBC,EAAYD,CAAM,GAAG,EAAE,GAG/EoD,IAAuB9C;AAAA,IAC3B,CAACN,MAA6B;AAC5B,UAAI,CAACiD,EAAejD,CAAM,UAAU,CAAA;AAEpC,YAAMkB,IAAWjB,EAAYD,CAAM;AACnC,UAAI,CAACkB,EAAU,QAAO,CAAA;AAEtB,YAAMmC,IAAW1D,EAAc,aAAa,IAAIuB,EAAS,KAAK,GACxDoC,IAAW3D,EAAc,aAAa,IAAIuB,EAAS,KAAK;AAE9D,UAAImC,MAAa,UAAaC,MAAa,eAAkB,CAAA;AAG7D,YAAMC,IAAM5D,EAAc,aAAa,IAAI0D,IAAW,CAAC,GACjDG,IAAQ7D,EAAc,aAAa,IAAI2D,IAAW,CAAC,GACnDG,IAAS9D,EAAc,aAAa,IAAI0D,IAAW,CAAC,GACpDK,IAAO/D,EAAc,aAAa,IAAI2D,IAAW,CAAC;AAGxD,UAAIK,IAAYC,EAAe;AAG/B,cAAI,CAACL,KAAO,CAACzE,EAAc,IAAIwD,EAAUiB,GAAKrC,EAAS,KAAK,CAAC,OAC3DyC,KAAaC,EAAe,OAI1B,CAACJ,KAAS,CAAC1E,EAAc,IAAIwD,EAAUpB,EAAS,OAAOsC,CAAK,CAAC,OAC/DG,KAAaC,EAAe,SAI1B,CAACH,KAAU,CAAC3E,EAAc,IAAIwD,EAAUmB,GAAQvC,EAAS,KAAK,CAAC,OACjEyC,KAAaC,EAAe,UAI1B,CAACF,KAAQ,CAAC5E,EAAc,IAAIwD,EAAUpB,EAAS,OAAOwC,CAAI,CAAC,OAC7DC,KAAaC,EAAe,OAGvBC,GAAiBF,CAAS;AAAA,IACnC;AAAA,IACA,CAAC7E,GAAea,GAAesD,CAAc;AAAA,EAAA,GAIzCa,IAAQlE;AAAA,IACZ,OAAO;AAAA,MACL,eAAAd;AAAA,MACA,cAAAiB;AAAA,MACA,eAAAd;AAAA,MACA,qBAAAE;AAAA,MACA,YAAAE;AAAA,MACA,SAASM;AAAA,MACT,kBAAAZ;AAAA,MACA,kBAAAG;AAAA,MACA,eAAAI;AAAA,MACA,cAAAe;AAAA,MACA,YAAAwC;AAAA,MACA,gBAAAN;AAAA,MACA,iBAAAE;AAAA,MACA,cAAAG;AAAA,MACA,WAAAG;AAAA,MACA,gBAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,eAAAC;AAAA,MACA,uBAAAC;AAAA,MACA,sBAAAC;AAAA,IAAA;AAAA,IAEF;AAAA,MACEtE;AAAA,MACAiB;AAAA,MACAd;AAAA,MACAE;AAAA,MACAE;AAAA,MACAM;AAAA,MACAZ;AAAA,MACAG;AAAA,MACAI;AAAA,MACAe;AAAA,MACAwC;AAAA,MACAN;AAAA,MACAE;AAAA,MACAG;AAAA,MACAG;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAAA,EACF;AAGF,SAAOW,gBAAAA,GAAAA,IAACC,GAAsB,UAAtB,EAA+B,OAAAF,GAAe,UAAAjF,EAAA,CAAS;AACjE;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const E=require("./useGetEntityTypeData.cjs.js"),P=require("react");require("@ynput/ayon-react-components");require("short-uuid");require("react-toastify");require("lodash");require("uuid");require("../../../util/pubsub.cjs.js");require("../context/CellEditingContext.cjs.js");require("../../../../../_virtual/jsx-runtime.cjs.js");require("../context/SelectionCellsContext.cjs.js");require("../context/ProjectTableQueriesContext.cjs.js");require("../context/ProjectTableContext.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 O=require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../../../context/UriContext.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/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");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");require("../context/ClipboardContext.cjs.js");require("@tanstack/react-table");require("@tanstack/react-virtual");require("clsx");require("../widgets/CollapsedWidget.cjs.js");require("../widgets/DateWidget.cjs.js");require("../widgets/EnumWidget.cjs.js");require("../widgets/TextWidget.cjs.js");require("../widgets/BooleanWidget.cjs.js");require("../widgets/CellWidget.cjs.js");require("../widgets/EntityNameWidget.cjs.js");require("../widgets/GroupHeaderWidget.cjs.js");require("../widgets/ThumbnailWidget.cjs.js");require("../../../components/AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../../../components/AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../../../components/AccessUser/AccessUser.cjs.js");require("../../../components/AttributeEditor/components/MinMaxField.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../../components/Badge/Badge.cjs.js");require("../../../components/Chips/Chips.cjs.js");require("date-fns");require("../../../components/DateRangePicker/DateRangePicker.styled.cjs.js");require("../../../components/LinksManager/CellEditingDialog.cjs.js");require("../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../../components/DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("../../../components/DetailsPanelDetails/DetailsSection.cjs.js");require("../../../components/DetailsPanelDetails/FieldLabel.cjs.js");require("../../../components/DoneCheckbox/DoneCheckbox.cjs.js");require("../../../components/EarlyPreview/EarlyPreview.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../ContextMenu/ContextMenuContext.cjs.js");;/* empty css */require("../../Feed/context/FeedContext.cjs.js");require("../../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../../Feed/components/CommentInput/CommentInput.cjs.js");require("../../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("../../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("react-router-dom");require("../../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../Feed/components/ActivityDate.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../Feed/Feed.styled.cjs.js");require("../../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js");require("../../Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("../context/ProjectDataContext.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../components/GroupSettingsFallback.cjs.js");require("../components/HeaderActionButton.cjs.js");require("../components/RowSelectionHeader.cjs.js");require("../components/SelectionCell.cjs.js");require("../components/ColumnHeaderMenu.cjs.js");require("../../SimpleTable/SimpleTable.styled.cjs.js");require("@tanstack/match-sorter-utils");require("../../SimpleTable/context/SimpleTableContext.cjs.js");require("../../SimpleTable/SimpleTableRowTemplate.cjs.js");require("../../Slicer/hooks/useTableDataBySlice.cjs.js");require("../../Slicer/components/SlicerSearch.cjs.js");require("../../Slicer/context/SlicerContext.cjs.js");require("../../DetailsPanel/DetailsPanel.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../../components/PlayableIcon/PlayableIcon.cjs.js");require("../../DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../Actions/Actions.styled.cjs.js");require("../../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../Actions/ActionIcon.cjs.js");require("../../Views/context/ViewsContext.cjs.js");require("../../Views/Views.styled.cjs.js");require("../../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../EntityPickerDialog/EntityPickerDialog.cjs.js");require("../../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("axios");require("../../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("../../../components/EntityPath/EntityPath.styled.cjs.js");require("../../../components/EntityPath/SegmentProvider.cjs.js");require("../../../components/FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../../../components/Feedback/FeedbackContext.cjs.js");require("../../../components/Feedback/SupportBubble.cjs.js");require("../../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../../components/LegacyBadge/LegacyBadge.cjs.js");require("../../../components/LinksManager/LinksManager.styled.cjs.js");require("../../../components/Powerpack/PowerpackButton.cjs.js");require("../../../components/Powerpack/PricingLink.cjs.js");require("../../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../../components/Powerpack/CTAButton.cjs.js");require("../../../components/Powerpack/RequiredAddonVersion.cjs.js");require("../../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../../components/SizeSlider/SizeSlider.cjs.js");require("../../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../../components/SearchFilter/filterDates.cjs.js");require("../../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../../components/ShareOptionIcon/ShareOptionIcon.cjs.js");require("../../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../../components/SortingSetting/SortingSetting.styled.cjs.js");require("../../../components/StyledLink/StyledLink.cjs.js");require("../../../components/TableGridSwitch/TableGridSwitch.cjs.js");require("../../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../../components/Watchers/Watchers.cjs.js");require("../../../components/Menu/Menu.styled.cjs.js");require("../../../components/Menu/MenuItem.cjs.js");require("../../../components/ReviewablesSelector/ReviewablesSelector.styled.cjs.js");require("../context/DetailsPanelEntityContext.cjs.js");require("../context/SelectedRowsContext.cjs.js");require("../widgets/EmptyWidget.cjs.js");require("../widgets/ErrorWidget.cjs.js");require("../ProjectTreeTable.styled.cjs.js");require("../widgets/LoadMoreWidget.cjs.js");require("../context/ColumnSettingsContext.cjs.js");const U=require("../utils/linksToTableData.cjs.js"),A="next-page",b="_ungrouped",m="__",D=e=>e?Array.isArray(e)?e.map(q=>q.toString()):[e.toString()]:[],x=(e,q,s)=>{if(!s)return{value:q,label:q};const u=s.find(t=>t.value===q);return u?{value:u.value,label:u.label||u.value,color:u.color,icon:u.icon,count:u.count,img:e==="assignees"?`/api/users/${u.value}/avatar`:void 0}:{value:q,label:q}},c="_GROUP_",w=e=>`${c}${e}`,S=e=>e.startsWith(c)?e.slice(c.length):null,N=e=>e.startsWith(c),W=(e,q,s=[])=>{const u=e.id.replace("attrib.","");return u==="status"?q?.statuses?.map(t=>t.name)||[]:u==="taskType"?q?.taskTypes?.map(t=>t.name)||[]:u==="folderType"?q?.folderTypes?.map(t=>t.name)||[]:e.id.startsWith("attrib.")?s.find(t=>t.name===u)?.data.enum?.map(t=>t.value.toString())||[]:[]},C=(e,q,s,u,t)=>{const d=t(s,e.taskType);return{id:e.id+m+q,entityId:e.id,entityType:s,parentId:e.folderId,name:e.name||"",label:e.label||e.name||"",icon:d?.icon||null,color:d?.color||null,status:e.status,assignees:e.assignees,tags:e.tags,img:null,subRows:[],subType:e.taskType||null,attrib:e.attrib,ownAttrib:e.ownAttrib,parents:e.parents||[],updatedAt:e.updatedAt,links:U.linksToTableData(e.links,s,{folderTypes:u?.folderTypes||[],productTypes:Object.values(u.productTypes)||[],taskTypes:u?.taskTypes||[]}),subtasks:e.subtasks||[]}},$=({entities:e,entityType:q,groups:s=[],attribFields:u,showEmpty:t,groupRowFunc:d})=>{const g=O.useProjectContext(),I=E.useGetEntityTypeData({projectInfo:g}),f=P.useCallback((n,a)=>{const p=d?d(n):C(n,a,q,g,I);return{...p,id:n.id+m+a,subRows:p.subRows||[]}},[d,I,q,g]);return n=>{const a=new Map;for(const o of s){const i=o.value?.toString(),l=w(i),r=x(n.id,i,s);a.set(i,{id:l,name:i,entityType:"group",subRows:[],label:r.label,group:r,links:{}})}const p=c+"."+b,_=()=>{let o=a.get(p);return o||(o={id:p,name:"Ungrouped",entityType:"group",subRows:[],label:"Ungrouped",group:{value:p,label:"Ungrouped"},links:{}},a.set(p,o)),o};for(const[o,i]of e){if(i.entityType!==q)continue;let l=[];if(n.id.startsWith("attrib.")){const r=n.id.split(".")[1];l=D(i.attrib?.[r])}else l=D(i[n.id]);l.length===0&&_().subRows?.push(f(i,b));for(const r of l){const v=a.get(r);v?v.subRows?.push(f(i,r)):_().subRows?.push(f(i,b))}if("groups"in i&&Array.isArray(i.groups)){for(const r of i.groups)if(r.hasNextPage&&a.has(r.value)){const R=a.get(r.value);R&&R.subRows?.push({id:`${r.value}-next-page`,name:"Load more tasks...",entityType:A,subRows:[],label:`Next page for ${r.value}`,group:{value:r.value,label:r.value},links:{}})}}}const G=Array.from(a.values()),T=W(n,g,u),y=n.desc?-1:1;G.sort((o,i)=>{if(o.group?.value===p)return 1;if(i.group?.value===p)return-1;if(T.length){const l=T.indexOf(o.group?.value||""),r=T.indexOf(i.group?.value||"");return l!==-1&&r!==-1?(l-r)*y:l!==-1?-1:r!==-1?1:(o.group?.label?.localeCompare(i.group?.label||"")||0)*y}else return(o.group?.label?.localeCompare(i.group?.label||"")||0)*y});const h=G.filter(o=>o.group?.count&&o.group.count>0);return t?G:h}};exports.GROUP_BY_ID=c;exports.NEXT_PAGE_ID=A;exports.ROW_ID_SEPARATOR=m;exports.UNGROUPED_VALUE=b;exports.buildGroupId=w;exports.default=$;exports.isGroupId=N;exports.parseGroupId=S;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const E=require("./useGetEntityTypeData.cjs.js"),P=require("react");require("@ynput/ayon-react-components");require("short-uuid");require("react-toastify");require("lodash");require("uuid");require("../../../util/pubsub.cjs.js");require("../context/CellEditingContext.cjs.js");require("../../../../../_virtual/jsx-runtime.cjs.js");require("../context/SelectionCellsContext.cjs.js");require("../context/ProjectTableQueriesContext.cjs.js");require("../context/ProjectTableContext.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 O=require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../../../context/UriContext.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/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");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");require("../context/ClipboardContext.cjs.js");require("@tanstack/react-table");require("@tanstack/react-virtual");require("clsx");require("../widgets/CollapsedWidget.cjs.js");require("../widgets/DateWidget.cjs.js");require("../widgets/EnumWidget.cjs.js");require("../widgets/TextWidget.cjs.js");require("../widgets/BooleanWidget.cjs.js");require("../widgets/CellWidget.cjs.js");require("../widgets/EntityNameWidget.cjs.js");require("../widgets/GroupHeaderWidget.cjs.js");require("../widgets/ThumbnailWidget.cjs.js");require("../../../components/AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../../../components/AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../../../components/AccessUser/AccessUser.cjs.js");require("../../../components/AttributeEditor/components/MinMaxField.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../../components/Badge/Badge.cjs.js");require("../../../components/Chips/Chips.cjs.js");require("date-fns");require("../../../components/DateRangePicker/DateRangePicker.styled.cjs.js");require("../../../components/LinksManager/CellEditingDialog.cjs.js");require("../../../../../_virtual/index.cjs.js");require("../../../../../node_modules/refractor/lib/common.cjs.js");require("../../../../../node_modules/refractor/lib/all.cjs.js");;/* empty css */require("../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../../components/DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("../../../components/DetailsPanelDetails/DetailsSection.cjs.js");require("../../../components/DetailsPanelDetails/FieldLabel.cjs.js");require("../../../components/DoneCheckbox/DoneCheckbox.cjs.js");require("../../../components/EarlyPreview/EarlyPreview.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../ContextMenu/ContextMenuContext.cjs.js");;/* empty css */require("../../Feed/context/FeedContext.cjs.js");require("../../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../../Feed/components/CommentInput/CommentInput.cjs.js");require("../../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("../../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("react-router-dom");require("../../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../Feed/components/ActivityDate.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../Feed/Feed.styled.cjs.js");require("../../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js");require("../../Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("../context/ProjectDataContext.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../components/GroupSettingsFallback.cjs.js");require("../components/HeaderActionButton.cjs.js");require("../components/RowSelectionHeader.cjs.js");require("../components/SelectionCell.cjs.js");require("../components/ColumnHeaderMenu.cjs.js");require("../../SimpleTable/SimpleTable.styled.cjs.js");require("@tanstack/match-sorter-utils");require("../../SimpleTable/context/SimpleTableContext.cjs.js");require("../../SimpleTable/SimpleTableRowTemplate.cjs.js");require("../../Slicer/hooks/useTableDataBySlice.cjs.js");require("../../Slicer/components/SlicerSearch.cjs.js");require("../../Slicer/context/SlicerContext.cjs.js");require("../../DetailsPanel/DetailsPanel.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../../components/PlayableIcon/PlayableIcon.cjs.js");require("../../DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../Actions/Actions.styled.cjs.js");require("../../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../Actions/ActionIcon.cjs.js");require("../../Views/context/ViewsContext.cjs.js");require("../../Views/Views.styled.cjs.js");require("../../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../EntityPickerDialog/EntityPickerDialog.cjs.js");require("../../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("axios");require("../../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("../../../components/EntityPath/EntityPath.styled.cjs.js");require("../../../components/EntityPath/SegmentProvider.cjs.js");require("../../../components/FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../../../components/Feedback/FeedbackContext.cjs.js");require("../../../components/Feedback/SupportBubble.cjs.js");require("../../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../../components/LegacyBadge/LegacyBadge.cjs.js");require("../../../components/LinksManager/LinksManager.styled.cjs.js");require("../../../components/Powerpack/PowerpackButton.cjs.js");require("../../../components/Powerpack/PricingLink.cjs.js");require("../../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../../components/Powerpack/CTAButton.cjs.js");require("../../../components/Powerpack/RequiredAddonVersion.cjs.js");require("../../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../../components/SizeSlider/SizeSlider.cjs.js");require("../../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../../components/SearchFilter/filterDates.cjs.js");require("../../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../../components/ShareOptionIcon/ShareOptionIcon.cjs.js");require("../../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../../components/SortingSetting/SortingSetting.styled.cjs.js");require("../../../components/StyledLink/StyledLink.cjs.js");require("../../../components/TableGridSwitch/TableGridSwitch.cjs.js");require("../../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../../components/Watchers/Watchers.cjs.js");require("../../../components/Menu/Menu.styled.cjs.js");require("../../../components/Menu/MenuItem.cjs.js");require("../../../components/ReviewablesSelector/ReviewablesSelector.styled.cjs.js");require("../context/DetailsPanelEntityContext.cjs.js");require("../context/SelectedRowsContext.cjs.js");require("../widgets/EmptyWidget.cjs.js");require("../widgets/ErrorWidget.cjs.js");require("../ProjectTreeTable.styled.cjs.js");require("../widgets/LoadMoreWidget.cjs.js");require("../context/ColumnSettingsContext.cjs.js");const U=require("../utils/linksToTableData.cjs.js"),A="next-page",b="_ungrouped",m="__",D=e=>e?Array.isArray(e)?e.map(q=>q.toString()):[e.toString()]:[],x=(e,q,s)=>{if(!s)return{value:q,label:q};const u=s.find(t=>t.value===q);return u?{value:u.value,label:u.label||u.value,color:u.color,icon:u.icon,count:u.count,img:e==="assignees"?`/api/users/${u.value}/avatar`:void 0}:{value:q,label:q}},c="_GROUP_",w=e=>`${c}${e}`,S=e=>e.startsWith(c)?e.slice(c.length):null,N=e=>e.startsWith(c),W=(e,q,s=[])=>{const u=e.id.replace("attrib.","");return u==="status"?q?.statuses?.map(t=>t.name)||[]:u==="taskType"?q?.taskTypes?.map(t=>t.name)||[]:u==="folderType"?q?.folderTypes?.map(t=>t.name)||[]:e.id.startsWith("attrib.")?s.find(t=>t.name===u)?.data.enum?.map(t=>t.value.toString())||[]:[]},C=(e,q,s,u,t)=>{const d=t(s,e.taskType);return{id:e.id+m+q,entityId:e.id,entityType:s,parentId:e.folderId,name:e.name||"",label:e.label||e.name||"",icon:d?.icon||null,color:d?.color||null,status:e.status,assignees:e.assignees,tags:e.tags,img:null,subRows:[],subType:e.taskType||null,attrib:e.attrib,ownAttrib:e.ownAttrib,parents:e.parents||[],updatedAt:e.updatedAt,links:U.linksToTableData(e.links,s,{folderTypes:u?.folderTypes||[],productTypes:Object.values(u.productTypes)||[],taskTypes:u?.taskTypes||[]}),subtasks:e.subtasks||[]}},$=({entities:e,entityType:q,groups:s=[],attribFields:u,showEmpty:t,groupRowFunc:d})=>{const g=O.useProjectContext(),I=E.useGetEntityTypeData({projectInfo:g}),f=P.useCallback((n,a)=>{const p=d?d(n):C(n,a,q,g,I);return{...p,id:n.id+m+a,subRows:p.subRows||[]}},[d,I,q,g]);return n=>{const a=new Map;for(const o of s){const i=o.value?.toString(),l=w(i),r=x(n.id,i,s);a.set(i,{id:l,name:i,entityType:"group",subRows:[],label:r.label,group:r,links:{}})}const p=c+"."+b,_=()=>{let o=a.get(p);return o||(o={id:p,name:"Ungrouped",entityType:"group",subRows:[],label:"Ungrouped",group:{value:p,label:"Ungrouped"},links:{}},a.set(p,o)),o};for(const[o,i]of e){if(i.entityType!==q)continue;let l=[];if(n.id.startsWith("attrib.")){const r=n.id.split(".")[1];l=D(i.attrib?.[r])}else l=D(i[n.id]);l.length===0&&_().subRows?.push(f(i,b));for(const r of l){const v=a.get(r);v?v.subRows?.push(f(i,r)):_().subRows?.push(f(i,b))}if("groups"in i&&Array.isArray(i.groups)){for(const r of i.groups)if(r.hasNextPage&&a.has(r.value)){const R=a.get(r.value);R&&R.subRows?.push({id:`${r.value}-next-page`,name:"Load more tasks...",entityType:A,subRows:[],label:`Next page for ${r.value}`,group:{value:r.value,label:r.value},links:{}})}}}const G=Array.from(a.values()),T=W(n,g,u),y=n.desc?-1:1;G.sort((o,i)=>{if(o.group?.value===p)return 1;if(i.group?.value===p)return-1;if(T.length){const l=T.indexOf(o.group?.value||""),r=T.indexOf(i.group?.value||"");return l!==-1&&r!==-1?(l-r)*y:l!==-1?-1:r!==-1?1:(o.group?.label?.localeCompare(i.group?.label||"")||0)*y}else return(o.group?.label?.localeCompare(i.group?.label||"")||0)*y});const h=G.filter(o=>o.group?.count&&o.group.count>0);return t?G:h}};exports.GROUP_BY_ID=c;exports.NEXT_PAGE_ID=A;exports.ROW_ID_SEPARATOR=m;exports.UNGROUPED_VALUE=b;exports.buildGroupId=w;exports.default=$;exports.isGroupId=N;exports.parseGroupId=S;
2
2
  //# sourceMappingURL=useBuildGroupByTableData.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBuildGroupByTableData.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { EntityGroup } from '@shared/api'\nimport { TableGroupBy } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { useCallback } from 'react'\nimport { linksToTableData } from '../utils'\nimport { ProjectModelWithProducts, useProjectContext } from '@shared/context'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\nexport const UNGROUPED_VALUE = '_ungrouped'\nexport const ROW_ID_SEPARATOR = '__'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: EntityGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n entities: EntitiesMap\n entityType: string\n groups?: EntityGroup[]\n attribFields: ProjectTableAttribute[]\n showEmpty?: boolean\n groupRowFunc?: (node: any) => TableRow\n}\n\n// get sorting ids based on the groupBy field\nconst getSortingIds = (\n groupBy: TableGroupBy,\n project?: ProjectModelWithProducts,\n attribFields: ProjectTableAttribute[] = [],\n): string[] => {\n const attributeId = groupBy.id.replace('attrib.', '')\n\n // for status, taskType, folderType use project data order\n if (attributeId === 'status') {\n return project?.statuses?.map((s) => s.name) || []\n } else if (attributeId === 'taskType') {\n return project?.taskTypes?.map((t) => t.name) || []\n } else if (attributeId === 'folderType') {\n return project?.folderTypes?.map((f) => f.name) || []\n } else if (groupBy.id.startsWith('attrib.')) {\n // for other enum attributes, use the enum values order\n return (\n attribFields\n .find((field) => field.name === attributeId)\n ?.data.enum?.map((e) => e.value.toString()) || []\n )\n } else return []\n}\n\nconst defaultEntityToGroupRow = (\n task: EditorTaskNode,\n group: string | undefined,\n entityType: string,\n project: ProjectModelWithProducts,\n getEntityTypeData: ReturnType<typeof useGetEntityTypeData>,\n): TableRow & { subRows: TableRow[] } => {\n const typeData = getEntityTypeData(entityType, task.taskType)\n return {\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the folder\n entityId: task.id,\n entityType: entityType,\n parentId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n updatedAt: task.updatedAt,\n links: linksToTableData(task.links, entityType, {\n folderTypes: project?.folderTypes || [],\n productTypes: Object.values(project.productTypes) || [],\n taskTypes: project?.taskTypes || [],\n }),\n subtasks: task.subtasks || [],\n }\n}\n\nconst useBuildGroupByTableData = ({\n entities,\n entityType,\n groups = [],\n attribFields,\n showEmpty,\n groupRowFunc, // for versions etc\n}: BuildGroupByTableProps) => {\n const project = useProjectContext()\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = useCallback(\n (task: EditorTaskNode, group?: string): TableRow & { subRows: TableRow[] } => {\n // Use provided groupRowFunc or fall back to default\n const baseRow = groupRowFunc\n ? groupRowFunc(task)\n : defaultEntityToGroupRow(task, group, entityType, project, getEntityTypeData)\n\n // Ensure group-specific fields are set\n return {\n ...baseRow,\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the group\n subRows: baseRow.subRows || [],\n }\n },\n [groupRowFunc, getEntityTypeData, entityType, project],\n )\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value?.toString() as string\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n links: {},\n })\n }\n\n const ungroupedId = GROUP_BY_ID + '.' + UNGROUPED_VALUE // unique id for ungrouped group\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(ungroupedId)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: ungroupedId, label: 'Ungrouped' },\n links: {},\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(ungroupedId, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib.')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('.')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows?.push(entityToGroupRow(entity as EditorTaskNode, groupValue))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows?.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n links: {},\n })\n }\n }\n }\n }\n }\n\n const groupsList = Array.from(groupsMap.values())\n\n const attribSortingIds = getSortingIds(groupBy, project, attribFields)\n\n // sort the groups by their label\n // if the group is an attribute with enum values, sort by the enum values\n const sortDirection = groupBy.desc ? -1 : 1\n groupsList.sort((a, b) => {\n if (a.group?.value === ungroupedId) return 1 // \"Ungrouped\" should always be last\n if (b.group?.value === ungroupedId) return -1 // \"Ungrouped\" should always be last\n if (attribSortingIds.length) {\n // sort by index of the enum value\n const indexA = attribSortingIds.indexOf(a.group?.value || '')\n const indexB = attribSortingIds.indexOf(b.group?.value || '')\n if (indexA !== -1 && indexB !== -1) {\n return (indexA - indexB) * sortDirection\n }\n if (indexA !== -1) return -1 // a is in the enum, b is not\n if (indexB !== -1) return 1 // b is in the enum, a is not\n // if both are not in the enum, sort by label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n } else {\n // for other groupings, sort by the group label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n }\n })\n\n // filter out empty groups\n const nonEmptyGroups = groupsList.filter((group) => group.group?.count && group.group.count > 0)\n\n return showEmpty ? groupsList : nonEmptyGroups\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":["NEXT_PAGE_ID","UNGROUPED_VALUE","ROW_ID_SEPARATOR","valueToStringArray","value","v","getGroupData","groupById","groupValue","groups","group","g","GROUP_BY_ID","buildGroupId","parseGroupId","groupId","isGroupId","id","getSortingIds","groupBy","project","attribFields","attributeId","s","f","field","e","defaultEntityToGroupRow","task","entityType","getEntityTypeData","typeData","linksToTableData","useBuildGroupByTableData","entities","showEmpty","groupRowFunc","useProjectContext","useGetEntityTypeData","entityToGroupRow","useCallback","baseRow","groupsMap","groupData","ungroupedId","getUnGroupedGroup","ungroupedGroup","entity","groupValues","groupRow","groupsList","attribSortingIds","sortDirection","a","b","indexA","indexB","nonEmptyGroups"],"mappings":"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"}
1
+ {"version":3,"file":"useBuildGroupByTableData.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { EntityGroup } from '@shared/api'\nimport { TableGroupBy } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { useCallback } from 'react'\nimport { linksToTableData } from '../utils'\nimport { ProjectModelWithProducts, useProjectContext } from '@shared/context'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\nexport const UNGROUPED_VALUE = '_ungrouped'\nexport const ROW_ID_SEPARATOR = '__'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: EntityGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n entities: EntitiesMap\n entityType: string\n groups?: EntityGroup[]\n attribFields: ProjectTableAttribute[]\n showEmpty?: boolean\n groupRowFunc?: (node: any) => TableRow\n}\n\n// get sorting ids based on the groupBy field\nconst getSortingIds = (\n groupBy: TableGroupBy,\n project?: ProjectModelWithProducts,\n attribFields: ProjectTableAttribute[] = [],\n): string[] => {\n const attributeId = groupBy.id.replace('attrib.', '')\n\n // for status, taskType, folderType use project data order\n if (attributeId === 'status') {\n return project?.statuses?.map((s) => s.name) || []\n } else if (attributeId === 'taskType') {\n return project?.taskTypes?.map((t) => t.name) || []\n } else if (attributeId === 'folderType') {\n return project?.folderTypes?.map((f) => f.name) || []\n } else if (groupBy.id.startsWith('attrib.')) {\n // for other enum attributes, use the enum values order\n return (\n attribFields\n .find((field) => field.name === attributeId)\n ?.data.enum?.map((e) => e.value.toString()) || []\n )\n } else return []\n}\n\nconst defaultEntityToGroupRow = (\n task: EditorTaskNode,\n group: string | undefined,\n entityType: string,\n project: ProjectModelWithProducts,\n getEntityTypeData: ReturnType<typeof useGetEntityTypeData>,\n): TableRow & { subRows: TableRow[] } => {\n const typeData = getEntityTypeData(entityType, task.taskType)\n return {\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the folder\n entityId: task.id,\n entityType: entityType,\n parentId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n updatedAt: task.updatedAt,\n links: linksToTableData(task.links, entityType, {\n folderTypes: project?.folderTypes || [],\n productTypes: Object.values(project.productTypes) || [],\n taskTypes: project?.taskTypes || [],\n }),\n subtasks: task.subtasks || [],\n }\n}\n\nconst useBuildGroupByTableData = ({\n entities,\n entityType,\n groups = [],\n attribFields,\n showEmpty,\n groupRowFunc, // for versions etc\n}: BuildGroupByTableProps) => {\n const project = useProjectContext()\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = useCallback(\n (task: EditorTaskNode, group?: string): TableRow & { subRows: TableRow[] } => {\n // Use provided groupRowFunc or fall back to default\n const baseRow = groupRowFunc\n ? groupRowFunc(task)\n : defaultEntityToGroupRow(task, group, entityType, project, getEntityTypeData)\n\n // Ensure group-specific fields are set\n return {\n ...baseRow,\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the group\n subRows: baseRow.subRows || [],\n }\n },\n [groupRowFunc, getEntityTypeData, entityType, project],\n )\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value?.toString() as string\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n links: {},\n })\n }\n\n const ungroupedId = GROUP_BY_ID + '.' + UNGROUPED_VALUE // unique id for ungrouped group\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(ungroupedId)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: ungroupedId, label: 'Ungrouped' },\n links: {},\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(ungroupedId, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib.')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('.')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows?.push(entityToGroupRow(entity as EditorTaskNode, groupValue))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows?.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n links: {},\n })\n }\n }\n }\n }\n }\n\n const groupsList = Array.from(groupsMap.values())\n\n const attribSortingIds = getSortingIds(groupBy, project, attribFields)\n\n // sort the groups by their label\n // if the group is an attribute with enum values, sort by the enum values\n const sortDirection = groupBy.desc ? -1 : 1\n groupsList.sort((a, b) => {\n if (a.group?.value === ungroupedId) return 1 // \"Ungrouped\" should always be last\n if (b.group?.value === ungroupedId) return -1 // \"Ungrouped\" should always be last\n if (attribSortingIds.length) {\n // sort by index of the enum value\n const indexA = attribSortingIds.indexOf(a.group?.value || '')\n const indexB = attribSortingIds.indexOf(b.group?.value || '')\n if (indexA !== -1 && indexB !== -1) {\n return (indexA - indexB) * sortDirection\n }\n if (indexA !== -1) return -1 // a is in the enum, b is not\n if (indexB !== -1) return 1 // b is in the enum, a is not\n // if both are not in the enum, sort by label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n } else {\n // for other groupings, sort by the group label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n }\n })\n\n // filter out empty groups\n const nonEmptyGroups = groupsList.filter((group) => group.group?.count && group.group.count > 0)\n\n return showEmpty ? groupsList : nonEmptyGroups\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":["NEXT_PAGE_ID","UNGROUPED_VALUE","ROW_ID_SEPARATOR","valueToStringArray","value","v","getGroupData","groupById","groupValue","groups","group","g","GROUP_BY_ID","buildGroupId","parseGroupId","groupId","isGroupId","id","getSortingIds","groupBy","project","attribFields","attributeId","s","f","field","e","defaultEntityToGroupRow","task","entityType","getEntityTypeData","typeData","linksToTableData","useBuildGroupByTableData","entities","showEmpty","groupRowFunc","useProjectContext","useGetEntityTypeData","entityToGroupRow","useCallback","baseRow","groupsMap","groupData","ungroupedId","getUnGroupedGroup","ungroupedGroup","entity","groupValues","groupRow","groupsList","attribSortingIds","sortDirection","a","b","indexA","indexB","nonEmptyGroups"],"mappings":"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"}
@@ -144,6 +144,10 @@ import "../../../components/Chips/Chips.es.js";
144
144
  import "date-fns";
145
145
  import "../../../components/DateRangePicker/DateRangePicker.styled.es.js";
146
146
  import "../../../components/LinksManager/CellEditingDialog.es.js";
147
+ import "../../../../../_virtual/index.es.js";
148
+ import "../../../../../node_modules/refractor/lib/common.es.js";
149
+ import "../../../../../node_modules/refractor/lib/all.es.js";
150
+ /* empty css */
147
151
  import "../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js";
148
152
  import "../../../components/DetailsPanelDetails/DetailsPanelDetails.es.js";
149
153
  import "../../../components/DetailsPanelDetails/DetailsSection.es.js";
@@ -281,7 +285,7 @@ const U = "next-page", R = "_ungrouped", I = "__", A = (t) => t ? Array.isArray(
281
285
  value: p,
282
286
  label: p
283
287
  };
284
- }, c = "_GROUP_", S = (t) => `${c}${t}`, Sp = (t) => t.startsWith(c) ? t.slice(c.length) : null, Np = (t) => t.startsWith(c), N = (t, p, s = []) => {
288
+ }, c = "_GROUP_", S = (t) => `${c}${t}`, Cp = (t) => t.startsWith(c) ? t.slice(c.length) : null, Lp = (t) => t.startsWith(c), N = (t, p, s = []) => {
285
289
  const r = t.id.replace("attrib.", "");
286
290
  return r === "status" ? p?.statuses?.map((m) => m.name) || [] : r === "taskType" ? p?.taskTypes?.map((m) => m.name) || [] : r === "folderType" ? p?.folderTypes?.map((m) => m.name) || [] : t.id.startsWith("attrib.") ? s.find((m) => m.name === r)?.data.enum?.map((m) => m.value.toString()) || [] : [];
287
291
  }, W = (t, p, s, r, m) => {
@@ -313,7 +317,7 @@ const U = "next-page", R = "_ungrouped", I = "__", A = (t) => t ? Array.isArray(
313
317
  }),
314
318
  subtasks: t.subtasks || []
315
319
  };
316
- }, Wp = ({
320
+ }, Mp = ({
317
321
  entities: t,
318
322
  entityType: p,
319
323
  groups: s = [],
@@ -409,8 +413,8 @@ export {
409
413
  I as ROW_ID_SEPARATOR,
410
414
  R as UNGROUPED_VALUE,
411
415
  S as buildGroupId,
412
- Wp as default,
413
- Np as isGroupId,
414
- Sp as parseGroupId
416
+ Mp as default,
417
+ Lp as isGroupId,
418
+ Cp as parseGroupId
415
419
  };
416
420
  //# sourceMappingURL=useBuildGroupByTableData.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBuildGroupByTableData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { EntityGroup } from '@shared/api'\nimport { TableGroupBy } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { useCallback } from 'react'\nimport { linksToTableData } from '../utils'\nimport { ProjectModelWithProducts, useProjectContext } from '@shared/context'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\nexport const UNGROUPED_VALUE = '_ungrouped'\nexport const ROW_ID_SEPARATOR = '__'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: EntityGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n entities: EntitiesMap\n entityType: string\n groups?: EntityGroup[]\n attribFields: ProjectTableAttribute[]\n showEmpty?: boolean\n groupRowFunc?: (node: any) => TableRow\n}\n\n// get sorting ids based on the groupBy field\nconst getSortingIds = (\n groupBy: TableGroupBy,\n project?: ProjectModelWithProducts,\n attribFields: ProjectTableAttribute[] = [],\n): string[] => {\n const attributeId = groupBy.id.replace('attrib.', '')\n\n // for status, taskType, folderType use project data order\n if (attributeId === 'status') {\n return project?.statuses?.map((s) => s.name) || []\n } else if (attributeId === 'taskType') {\n return project?.taskTypes?.map((t) => t.name) || []\n } else if (attributeId === 'folderType') {\n return project?.folderTypes?.map((f) => f.name) || []\n } else if (groupBy.id.startsWith('attrib.')) {\n // for other enum attributes, use the enum values order\n return (\n attribFields\n .find((field) => field.name === attributeId)\n ?.data.enum?.map((e) => e.value.toString()) || []\n )\n } else return []\n}\n\nconst defaultEntityToGroupRow = (\n task: EditorTaskNode,\n group: string | undefined,\n entityType: string,\n project: ProjectModelWithProducts,\n getEntityTypeData: ReturnType<typeof useGetEntityTypeData>,\n): TableRow & { subRows: TableRow[] } => {\n const typeData = getEntityTypeData(entityType, task.taskType)\n return {\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the folder\n entityId: task.id,\n entityType: entityType,\n parentId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n updatedAt: task.updatedAt,\n links: linksToTableData(task.links, entityType, {\n folderTypes: project?.folderTypes || [],\n productTypes: Object.values(project.productTypes) || [],\n taskTypes: project?.taskTypes || [],\n }),\n subtasks: task.subtasks || [],\n }\n}\n\nconst useBuildGroupByTableData = ({\n entities,\n entityType,\n groups = [],\n attribFields,\n showEmpty,\n groupRowFunc, // for versions etc\n}: BuildGroupByTableProps) => {\n const project = useProjectContext()\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = useCallback(\n (task: EditorTaskNode, group?: string): TableRow & { subRows: TableRow[] } => {\n // Use provided groupRowFunc or fall back to default\n const baseRow = groupRowFunc\n ? groupRowFunc(task)\n : defaultEntityToGroupRow(task, group, entityType, project, getEntityTypeData)\n\n // Ensure group-specific fields are set\n return {\n ...baseRow,\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the group\n subRows: baseRow.subRows || [],\n }\n },\n [groupRowFunc, getEntityTypeData, entityType, project],\n )\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value?.toString() as string\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n links: {},\n })\n }\n\n const ungroupedId = GROUP_BY_ID + '.' + UNGROUPED_VALUE // unique id for ungrouped group\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(ungroupedId)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: ungroupedId, label: 'Ungrouped' },\n links: {},\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(ungroupedId, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib.')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('.')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows?.push(entityToGroupRow(entity as EditorTaskNode, groupValue))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows?.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n links: {},\n })\n }\n }\n }\n }\n }\n\n const groupsList = Array.from(groupsMap.values())\n\n const attribSortingIds = getSortingIds(groupBy, project, attribFields)\n\n // sort the groups by their label\n // if the group is an attribute with enum values, sort by the enum values\n const sortDirection = groupBy.desc ? -1 : 1\n groupsList.sort((a, b) => {\n if (a.group?.value === ungroupedId) return 1 // \"Ungrouped\" should always be last\n if (b.group?.value === ungroupedId) return -1 // \"Ungrouped\" should always be last\n if (attribSortingIds.length) {\n // sort by index of the enum value\n const indexA = attribSortingIds.indexOf(a.group?.value || '')\n const indexB = attribSortingIds.indexOf(b.group?.value || '')\n if (indexA !== -1 && indexB !== -1) {\n return (indexA - indexB) * sortDirection\n }\n if (indexA !== -1) return -1 // a is in the enum, b is not\n if (indexB !== -1) return 1 // b is in the enum, a is not\n // if both are not in the enum, sort by label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n } else {\n // for other groupings, sort by the group label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n }\n })\n\n // filter out empty groups\n const nonEmptyGroups = groupsList.filter((group) => group.group?.count && group.group.count > 0)\n\n return showEmpty ? groupsList : nonEmptyGroups\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":["NEXT_PAGE_ID","UNGROUPED_VALUE","ROW_ID_SEPARATOR","valueToStringArray","value","v","getGroupData","groupById","groupValue","groups","group","g","GROUP_BY_ID","buildGroupId","parseGroupId","groupId","isGroupId","id","getSortingIds","groupBy","project","attribFields","attributeId","s","t","f","field","e","defaultEntityToGroupRow","task","entityType","getEntityTypeData","typeData","linksToTableData","useBuildGroupByTableData","entities","showEmpty","groupRowFunc","useProjectContext","useGetEntityTypeData","entityToGroupRow","useCallback","baseRow","groupsMap","groupData","ungroupedId","getUnGroupedGroup","ungroupedGroup","entity","groupValues","groupRow","groupsList","attribSortingIds","sortDirection","a","b","indexA","indexB","nonEmptyGroups"],"mappings":"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"}
1
+ {"version":3,"file":"useBuildGroupByTableData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { EntityGroup } from '@shared/api'\nimport { TableGroupBy } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { useCallback } from 'react'\nimport { linksToTableData } from '../utils'\nimport { ProjectModelWithProducts, useProjectContext } from '@shared/context'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\nexport const UNGROUPED_VALUE = '_ungrouped'\nexport const ROW_ID_SEPARATOR = '__'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: EntityGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n entities: EntitiesMap\n entityType: string\n groups?: EntityGroup[]\n attribFields: ProjectTableAttribute[]\n showEmpty?: boolean\n groupRowFunc?: (node: any) => TableRow\n}\n\n// get sorting ids based on the groupBy field\nconst getSortingIds = (\n groupBy: TableGroupBy,\n project?: ProjectModelWithProducts,\n attribFields: ProjectTableAttribute[] = [],\n): string[] => {\n const attributeId = groupBy.id.replace('attrib.', '')\n\n // for status, taskType, folderType use project data order\n if (attributeId === 'status') {\n return project?.statuses?.map((s) => s.name) || []\n } else if (attributeId === 'taskType') {\n return project?.taskTypes?.map((t) => t.name) || []\n } else if (attributeId === 'folderType') {\n return project?.folderTypes?.map((f) => f.name) || []\n } else if (groupBy.id.startsWith('attrib.')) {\n // for other enum attributes, use the enum values order\n return (\n attribFields\n .find((field) => field.name === attributeId)\n ?.data.enum?.map((e) => e.value.toString()) || []\n )\n } else return []\n}\n\nconst defaultEntityToGroupRow = (\n task: EditorTaskNode,\n group: string | undefined,\n entityType: string,\n project: ProjectModelWithProducts,\n getEntityTypeData: ReturnType<typeof useGetEntityTypeData>,\n): TableRow & { subRows: TableRow[] } => {\n const typeData = getEntityTypeData(entityType, task.taskType)\n return {\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the folder\n entityId: task.id,\n entityType: entityType,\n parentId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n updatedAt: task.updatedAt,\n links: linksToTableData(task.links, entityType, {\n folderTypes: project?.folderTypes || [],\n productTypes: Object.values(project.productTypes) || [],\n taskTypes: project?.taskTypes || [],\n }),\n subtasks: task.subtasks || [],\n }\n}\n\nconst useBuildGroupByTableData = ({\n entities,\n entityType,\n groups = [],\n attribFields,\n showEmpty,\n groupRowFunc, // for versions etc\n}: BuildGroupByTableProps) => {\n const project = useProjectContext()\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = useCallback(\n (task: EditorTaskNode, group?: string): TableRow & { subRows: TableRow[] } => {\n // Use provided groupRowFunc or fall back to default\n const baseRow = groupRowFunc\n ? groupRowFunc(task)\n : defaultEntityToGroupRow(task, group, entityType, project, getEntityTypeData)\n\n // Ensure group-specific fields are set\n return {\n ...baseRow,\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the group\n subRows: baseRow.subRows || [],\n }\n },\n [groupRowFunc, getEntityTypeData, entityType, project],\n )\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value?.toString() as string\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n links: {},\n })\n }\n\n const ungroupedId = GROUP_BY_ID + '.' + UNGROUPED_VALUE // unique id for ungrouped group\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(ungroupedId)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: ungroupedId, label: 'Ungrouped' },\n links: {},\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(ungroupedId, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib.')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('.')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows?.push(entityToGroupRow(entity as EditorTaskNode, groupValue))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows?.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n links: {},\n })\n }\n }\n }\n }\n }\n\n const groupsList = Array.from(groupsMap.values())\n\n const attribSortingIds = getSortingIds(groupBy, project, attribFields)\n\n // sort the groups by their label\n // if the group is an attribute with enum values, sort by the enum values\n const sortDirection = groupBy.desc ? -1 : 1\n groupsList.sort((a, b) => {\n if (a.group?.value === ungroupedId) return 1 // \"Ungrouped\" should always be last\n if (b.group?.value === ungroupedId) return -1 // \"Ungrouped\" should always be last\n if (attribSortingIds.length) {\n // sort by index of the enum value\n const indexA = attribSortingIds.indexOf(a.group?.value || '')\n const indexB = attribSortingIds.indexOf(b.group?.value || '')\n if (indexA !== -1 && indexB !== -1) {\n return (indexA - indexB) * sortDirection\n }\n if (indexA !== -1) return -1 // a is in the enum, b is not\n if (indexB !== -1) return 1 // b is in the enum, a is not\n // if both are not in the enum, sort by label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n } else {\n // for other groupings, sort by the group label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n }\n })\n\n // filter out empty groups\n const nonEmptyGroups = groupsList.filter((group) => group.group?.count && group.group.count > 0)\n\n return showEmpty ? groupsList : nonEmptyGroups\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":["NEXT_PAGE_ID","UNGROUPED_VALUE","ROW_ID_SEPARATOR","valueToStringArray","value","v","getGroupData","groupById","groupValue","groups","group","g","GROUP_BY_ID","buildGroupId","parseGroupId","groupId","isGroupId","id","getSortingIds","groupBy","project","attribFields","attributeId","s","t","f","field","e","defaultEntityToGroupRow","task","entityType","getEntityTypeData","typeData","linksToTableData","useBuildGroupByTableData","entities","showEmpty","groupRowFunc","useProjectContext","useGetEntityTypeData","entityToGroupRow","useCallback","baseRow","groupsMap","groupData","ungroupedId","getUnGroupedGroup","ungroupedGroup","entity","groupValues","groupRow","groupsList","attribSortingIds","sortDirection","a","b","indexA","indexB","nonEmptyGroups"],"mappings":"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"}