box-ui-elements 16.0.0-beta.9 → 16.0.0

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 (788) hide show
  1. package/dist/explorer.css +1 -1
  2. package/dist/explorer.js +19 -58
  3. package/dist/openwith.css +1 -1
  4. package/dist/openwith.js +10 -10
  5. package/dist/picker.css +1 -1
  6. package/dist/picker.js +12 -12
  7. package/dist/preview.css +1 -1
  8. package/dist/preview.js +17 -56
  9. package/dist/sharing.css +1 -1
  10. package/dist/sharing.js +34 -34
  11. package/dist/sidebar.css +1 -1
  12. package/dist/sidebar.js +17 -56
  13. package/dist/uploader.css +1 -1
  14. package/dist/uploader.js +12 -12
  15. package/es/api/APIFactory.js +27 -0
  16. package/es/api/APIFactory.js.flow +26 -0
  17. package/es/api/APIFactory.js.map +1 -1
  18. package/es/api/Annotations.js +84 -8
  19. package/es/api/Annotations.js.flow +60 -6
  20. package/es/api/Annotations.js.map +1 -1
  21. package/es/api/Comments.js +2 -2
  22. package/es/api/Comments.js.flow +5 -4
  23. package/es/api/Comments.js.map +1 -1
  24. package/es/api/Feed.js +578 -71
  25. package/es/api/Feed.js.flow +677 -17
  26. package/es/api/Feed.js.map +1 -1
  27. package/es/api/FileCollaborators.js +29 -0
  28. package/es/api/FileCollaborators.js.flow +30 -0
  29. package/es/api/FileCollaborators.js.map +1 -1
  30. package/es/api/ThreadedComments.js +64 -27
  31. package/es/api/ThreadedComments.js.flow +54 -29
  32. package/es/api/ThreadedComments.js.map +1 -1
  33. package/es/api/fixtures.js +381 -0
  34. package/es/api/fixtures.js.flow +401 -0
  35. package/es/api/fixtures.js.map +1 -0
  36. package/es/api/messages.js +4 -0
  37. package/es/api/messages.js.flow +5 -0
  38. package/es/api/messages.js.map +1 -1
  39. package/es/api/utils.js +33 -0
  40. package/es/api/utils.js.flow +30 -0
  41. package/es/api/utils.js.map +1 -0
  42. package/es/common/types/annotations.js.flow +18 -12
  43. package/es/common/types/feed.js +1 -1
  44. package/es/common/types/feed.js.flow +40 -4
  45. package/es/common/types/feed.js.map +1 -1
  46. package/es/components/accessible-svg/AccessibleSVG.stories.js +20 -0
  47. package/es/components/accessible-svg/AccessibleSVG.stories.js.map +1 -0
  48. package/es/components/badge/Badge.stories.js +1 -13
  49. package/es/components/badge/Badge.stories.js.map +1 -1
  50. package/es/components/badge/BetaBadge.stories.js +10 -0
  51. package/es/components/badge/BetaBadge.stories.js.map +1 -0
  52. package/es/components/badge/TrialBadge.stories.js +10 -0
  53. package/es/components/badge/TrialBadge.stories.js.map +1 -0
  54. package/es/components/badge/UpgradeBadge.stories.js +10 -0
  55. package/es/components/badge/UpgradeBadge.stories.js.map +1 -0
  56. package/es/components/breadcrumb/Breadcrumb.js +48 -35
  57. package/es/components/breadcrumb/Breadcrumb.js.flow +68 -42
  58. package/es/components/breadcrumb/Breadcrumb.js.map +1 -1
  59. package/es/components/breadcrumb/EllipsisCrumb.js +5 -3
  60. package/es/components/breadcrumb/EllipsisCrumb.js.flow +10 -6
  61. package/es/components/breadcrumb/EllipsisCrumb.js.map +1 -1
  62. package/es/components/count-badge/CountBadge.stories.js +1 -1
  63. package/es/components/count-badge/CountBadge.stories.js.map +1 -1
  64. package/es/components/draggable-list/DraggableList.stories.js +119 -5
  65. package/es/components/draggable-list/DraggableList.stories.js.map +1 -1
  66. package/es/components/dropdown-menu/DropdownMenu.js +9 -0
  67. package/es/components/dropdown-menu/DropdownMenu.js.flow +11 -0
  68. package/es/components/dropdown-menu/DropdownMenu.js.map +1 -1
  69. package/es/components/dropdown-menu/DropdownMenu.scss +3 -3
  70. package/es/components/infinite-scroll/InfiniteScroll.js +4 -2
  71. package/es/components/infinite-scroll/InfiniteScroll.js.map +1 -1
  72. package/es/components/modal/Modal.scss +5 -1
  73. package/es/components/search-form/SearchForm.js +1 -1
  74. package/es/components/search-form/SearchForm.js.flow +1 -1
  75. package/es/components/search-form/SearchForm.js.map +1 -1
  76. package/es/components/table/makeSelectable.js +304 -97
  77. package/es/components/table/makeSelectable.js.flow +299 -98
  78. package/es/components/table/makeSelectable.js.map +1 -1
  79. package/es/components/tooltip/Tooltip.js +3 -2
  80. package/es/components/tooltip/Tooltip.js.map +1 -1
  81. package/es/constants.js +11 -0
  82. package/es/constants.js.flow +11 -0
  83. package/es/constants.js.map +1 -1
  84. package/es/elements/common/annotator-context/index.js +1 -0
  85. package/es/elements/common/annotator-context/index.js.flow +4 -0
  86. package/es/elements/common/annotator-context/index.js.map +1 -1
  87. package/es/elements/common/annotator-context/types.js +12 -0
  88. package/es/elements/common/annotator-context/types.js.flow +77 -35
  89. package/es/elements/common/annotator-context/types.js.map +1 -1
  90. package/es/elements/common/annotator-context/useAnnotatorEvents.js +205 -0
  91. package/es/elements/common/annotator-context/useAnnotatorEvents.js.flow +52 -0
  92. package/es/elements/common/annotator-context/useAnnotatorEvents.js.map +1 -0
  93. package/es/elements/common/annotator-context/withAnnotations.js +224 -5
  94. package/es/elements/common/annotator-context/withAnnotations.js.flow +73 -36
  95. package/es/elements/common/annotator-context/withAnnotations.js.map +1 -1
  96. package/es/elements/common/annotator-context/withAnnotatorContext.js +12 -4
  97. package/es/elements/common/annotator-context/withAnnotatorContext.js.flow +29 -9
  98. package/es/elements/common/annotator-context/withAnnotatorContext.js.map +1 -1
  99. package/es/elements/common/current-user/index.js +3 -0
  100. package/es/elements/common/current-user/index.js.flow +8 -0
  101. package/es/elements/common/current-user/index.js.map +1 -0
  102. package/es/elements/common/current-user/withCurrentUser.js +139 -0
  103. package/es/elements/common/current-user/withCurrentUser.js.flow +40 -0
  104. package/es/elements/common/current-user/withCurrentUser.js.map +1 -0
  105. package/es/elements/common/flowTypes.js.flow +22 -4
  106. package/es/elements/common/flowTypes.js.map +1 -1
  107. package/es/elements/common/interactionTargets.js +2 -0
  108. package/es/elements/common/interactionTargets.js.flow +2 -0
  109. package/es/elements/common/interactionTargets.js.map +1 -1
  110. package/es/elements/common/logger/Logger.js +1 -1
  111. package/es/elements/common/logger/Logger.js.flow +1 -1
  112. package/es/elements/common/logger/Logger.js.map +1 -1
  113. package/es/elements/common/messages.js +4 -0
  114. package/es/elements/common/messages.js.flow +5 -0
  115. package/es/elements/common/messages.js.map +1 -1
  116. package/es/elements/content-explorer/DeleteConfirmationDialog.js +2 -1
  117. package/es/elements/content-explorer/DeleteConfirmationDialog.js.flow +3 -1
  118. package/es/elements/content-explorer/DeleteConfirmationDialog.js.map +1 -1
  119. package/es/elements/content-explorer/DeleteConfirmationDialog.scss +5 -0
  120. package/es/elements/content-explorer/stories/DeleteConfirmationDialog.stories.js +58 -0
  121. package/es/elements/content-explorer/stories/DeleteConfirmationDialog.stories.js.flow +60 -0
  122. package/es/elements/content-explorer/stories/DeleteConfirmationDialog.stories.js.map +1 -0
  123. package/es/elements/content-sidebar/ActivitySidebar.js +323 -197
  124. package/es/elements/content-sidebar/ActivitySidebar.js.flow +381 -154
  125. package/es/elements/content-sidebar/ActivitySidebar.js.map +1 -1
  126. package/es/elements/content-sidebar/ActivitySidebarFilter.js +52 -0
  127. package/es/elements/content-sidebar/ActivitySidebarFilter.js.flow +59 -0
  128. package/es/elements/content-sidebar/ActivitySidebarFilter.js.map +1 -0
  129. package/es/elements/content-sidebar/ActivitySidebarFilter.scss +4 -0
  130. package/es/elements/content-sidebar/DetailsSidebar.js +50 -25
  131. package/es/elements/content-sidebar/DetailsSidebar.js.flow +32 -4
  132. package/es/elements/content-sidebar/DetailsSidebar.js.map +1 -1
  133. package/es/elements/content-sidebar/Sidebar.js +4 -1
  134. package/es/elements/content-sidebar/Sidebar.js.flow +6 -1
  135. package/es/elements/content-sidebar/Sidebar.js.map +1 -1
  136. package/es/elements/content-sidebar/SidebarContentInsights.js +45 -0
  137. package/es/elements/content-sidebar/SidebarContentInsights.js.map +1 -0
  138. package/es/elements/content-sidebar/SidebarContentInsights.scss +6 -0
  139. package/es/elements/content-sidebar/SidebarPanels.js +2 -0
  140. package/es/elements/content-sidebar/SidebarPanels.js.flow +4 -0
  141. package/es/elements/content-sidebar/SidebarPanels.js.map +1 -1
  142. package/es/elements/content-sidebar/activity-feed/activity-feed/ActiveState.js +91 -10
  143. package/es/elements/content-sidebar/activity-feed/activity-feed/ActiveState.js.flow +122 -24
  144. package/es/elements/content-sidebar/activity-feed/activity-feed/ActiveState.js.map +1 -1
  145. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityFeed.js +27 -15
  146. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityFeed.js.flow +59 -18
  147. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityFeed.js.map +1 -1
  148. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.js +101 -0
  149. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.js.flow +126 -0
  150. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.js.map +1 -0
  151. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.scss +17 -0
  152. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.js +69 -0
  153. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.js.flow +85 -0
  154. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.js.map +1 -0
  155. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.scss +16 -0
  156. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.js +62 -0
  157. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.js.flow +59 -0
  158. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.js.map +1 -0
  159. package/es/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.scss +22 -0
  160. package/es/elements/content-sidebar/activity-feed/activity-feed/activityFeedUtils.js +2 -2
  161. package/es/elements/content-sidebar/activity-feed/activity-feed/activityFeedUtils.js.flow +2 -2
  162. package/es/elements/content-sidebar/activity-feed/activity-feed/activityFeedUtils.js.map +1 -1
  163. package/es/elements/content-sidebar/activity-feed/activity-feed/fixtures.js +55 -0
  164. package/es/elements/content-sidebar/activity-feed/activity-feed/fixtures.js.map +1 -0
  165. package/es/elements/content-sidebar/activity-feed/activity-feed/messages.js +16 -0
  166. package/es/elements/content-sidebar/activity-feed/activity-feed/messages.js.flow +20 -0
  167. package/es/elements/content-sidebar/activity-feed/activity-feed/messages.js.map +1 -1
  168. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.js +121 -0
  169. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.js.flow +117 -0
  170. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.js.map +1 -0
  171. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.scss +7 -0
  172. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.js +75 -0
  173. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.js.flow +105 -0
  174. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.js.map +1 -0
  175. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.scss +5 -0
  176. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.js +77 -0
  177. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.js.flow +86 -0
  178. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.js.map +1 -0
  179. package/es/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.scss +3 -0
  180. package/es/elements/content-sidebar/activity-feed/annotation-thread/errors.js +11 -0
  181. package/es/elements/content-sidebar/activity-feed/annotation-thread/errors.js.flow +26 -0
  182. package/es/elements/content-sidebar/activity-feed/annotation-thread/errors.js.map +1 -0
  183. package/es/elements/content-sidebar/activity-feed/annotation-thread/index.js +2 -0
  184. package/es/elements/content-sidebar/activity-feed/annotation-thread/index.js.flow +1 -0
  185. package/es/elements/content-sidebar/activity-feed/annotation-thread/index.js.map +1 -0
  186. package/es/elements/content-sidebar/activity-feed/annotation-thread/messages.js +17 -0
  187. package/es/elements/content-sidebar/activity-feed/annotation-thread/messages.js.flow +21 -0
  188. package/es/elements/content-sidebar/activity-feed/annotation-thread/messages.js.map +1 -0
  189. package/es/elements/content-sidebar/activity-feed/annotation-thread/useAnnotationAPI.js +180 -0
  190. package/es/elements/content-sidebar/activity-feed/annotation-thread/useAnnotationAPI.js.flow +203 -0
  191. package/es/elements/content-sidebar/activity-feed/annotation-thread/useAnnotationAPI.js.map +1 -0
  192. package/es/elements/content-sidebar/activity-feed/annotation-thread/useRepliesAPI.js +124 -0
  193. package/es/elements/content-sidebar/activity-feed/annotation-thread/useRepliesAPI.js.flow +121 -0
  194. package/es/elements/content-sidebar/activity-feed/annotation-thread/useRepliesAPI.js.map +1 -0
  195. package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivity.js +19 -5
  196. package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivity.js.flow +24 -4
  197. package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivity.js.map +1 -1
  198. package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivityMenu.js +25 -4
  199. package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivityMenu.js.flow +36 -2
  200. package/es/elements/content-sidebar/activity-feed/annotations/AnnotationActivityMenu.js.map +1 -1
  201. package/es/elements/content-sidebar/activity-feed/annotations/messages.js +8 -0
  202. package/es/elements/content-sidebar/activity-feed/annotations/messages.js.flow +10 -0
  203. package/es/elements/content-sidebar/activity-feed/annotations/messages.js.map +1 -1
  204. package/es/elements/content-sidebar/activity-feed/comment/Comment.js +61 -28
  205. package/es/elements/content-sidebar/activity-feed/comment/Comment.js.flow +54 -10
  206. package/es/elements/content-sidebar/activity-feed/comment/Comment.js.map +1 -1
  207. package/es/elements/content-sidebar/activity-feed/comment/messages.js +8 -0
  208. package/es/elements/content-sidebar/activity-feed/comment/messages.js.flow +10 -0
  209. package/es/elements/content-sidebar/activity-feed/comment/messages.js.map +1 -1
  210. package/es/elements/content-sidebar/activity-feed/comment-form/CommentForm.js +4 -2
  211. package/es/elements/content-sidebar/activity-feed/comment-form/CommentForm.js.flow +3 -1
  212. package/es/elements/content-sidebar/activity-feed/comment-form/CommentForm.js.map +1 -1
  213. package/es/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.js +16 -5
  214. package/es/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.js.flow +34 -4
  215. package/es/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.js.map +1 -1
  216. package/es/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.scss +40 -3
  217. package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessage.js +49 -0
  218. package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessage.js.flow +42 -0
  219. package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessage.js.map +1 -0
  220. package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessageToggle.js +21 -0
  221. package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessageToggle.js.flow +24 -0
  222. package/es/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessageToggle.js.map +1 -0
  223. package/es/elements/content-sidebar/activity-feed/common/activity-message/messages.js +12 -0
  224. package/es/elements/content-sidebar/activity-feed/common/activity-message/messages.js.flow +15 -0
  225. package/es/elements/content-sidebar/activity-feed/common/activity-message/messages.js.map +1 -1
  226. package/es/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.js +24 -0
  227. package/es/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.js.flow +30 -0
  228. package/es/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.js.map +1 -0
  229. package/es/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.scss +6 -0
  230. package/es/elements/content-sidebar/activity-feed/common/activity-status/index.js +2 -0
  231. package/es/elements/content-sidebar/activity-feed/common/activity-status/index.js.flow +2 -0
  232. package/es/elements/content-sidebar/activity-feed/common/activity-status/index.js.map +1 -0
  233. package/es/elements/content-sidebar/activity-feed/common/activity-status/messages.js +9 -0
  234. package/es/elements/content-sidebar/activity-feed/common/activity-status/messages.js.flow +13 -0
  235. package/es/elements/content-sidebar/activity-feed/common/activity-status/messages.js.map +1 -0
  236. package/es/elements/content-sidebar/activity-feed/common/activity-timestamp/ActivityTimestamp.scss +1 -1
  237. package/es/elements/content-sidebar/fixtures.js +181 -0
  238. package/es/elements/content-sidebar/fixtures.js.flow +185 -0
  239. package/es/elements/content-sidebar/fixtures.js.map +1 -0
  240. package/es/elements/content-sidebar/flowTypes.js.flow +9 -25
  241. package/es/elements/content-sidebar/messages.js +8 -0
  242. package/es/elements/content-sidebar/messages.js.flow +10 -0
  243. package/es/elements/content-sidebar/messages.js.map +1 -1
  244. package/es/elements/content-sidebar/withErrorHandling.js.flow +1 -1
  245. package/es/elements/content-sidebar/withErrorHandling.js.map +1 -1
  246. package/es/elements/content-sidebar/withSidebarAnnotations.js +215 -30
  247. package/es/elements/content-sidebar/withSidebarAnnotations.js.flow +162 -11
  248. package/es/elements/content-sidebar/withSidebarAnnotations.js.map +1 -1
  249. package/es/elements/content-uploader/OverallUploadsProgressBar.js +10 -8
  250. package/es/elements/content-uploader/OverallUploadsProgressBar.js.flow +11 -12
  251. package/es/elements/content-uploader/OverallUploadsProgressBar.js.map +1 -1
  252. package/es/features/classification/Classification.scss +1 -1
  253. package/es/features/classification/security-controls/SecurityControlsItem.scss +1 -0
  254. package/es/features/classification/security-controls/messages.js +8 -0
  255. package/es/features/classification/security-controls/messages.js.flow +10 -0
  256. package/es/features/classification/security-controls/messages.js.map +1 -1
  257. package/es/features/classification/security-controls/utils.js +4 -7
  258. package/es/features/classification/security-controls/utils.js.flow +8 -12
  259. package/es/features/classification/security-controls/utils.js.map +1 -1
  260. package/es/features/content-explorer/content-explorer/ContentExplorer.js +6 -1
  261. package/es/features/content-explorer/content-explorer/ContentExplorer.js.flow +4 -0
  262. package/es/features/content-explorer/content-explorer/ContentExplorer.js.map +1 -1
  263. package/es/features/content-explorer/content-explorer/ContentExplorer.scss +4 -0
  264. package/es/features/content-explorer/content-explorer/ContentExplorerBreadcrumbs.js +15 -9
  265. package/es/features/content-explorer/content-explorer/ContentExplorerBreadcrumbs.js.flow +14 -11
  266. package/es/features/content-explorer/content-explorer/ContentExplorerBreadcrumbs.js.map +1 -1
  267. package/es/features/content-explorer/content-explorer/ContentExplorerHeaderActions.js +4 -1
  268. package/es/features/content-explorer/content-explorer/ContentExplorerHeaderActions.js.flow +4 -1
  269. package/es/features/content-explorer/content-explorer/ContentExplorerHeaderActions.js.map +1 -1
  270. package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js +6 -3
  271. package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js.flow +5 -1
  272. package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js.map +1 -1
  273. package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js +6 -1
  274. package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js.flow +5 -1
  275. package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js.map +1 -1
  276. package/es/features/content-explorer/prop-types.js +7 -1
  277. package/es/features/content-explorer/prop-types.js.flow +8 -0
  278. package/es/features/content-explorer/prop-types.js.map +1 -1
  279. package/es/features/content-insights/CompactCount.js +24 -0
  280. package/es/features/content-insights/CompactCount.js.map +1 -0
  281. package/es/features/content-insights/ContentAnalyticsErrorState.js +35 -0
  282. package/es/features/content-insights/ContentAnalyticsErrorState.js.map +1 -0
  283. package/es/features/content-insights/ContentAnalyticsErrorState.scss +17 -0
  284. package/es/features/content-insights/ContentInsightsSummary.js +42 -0
  285. package/es/features/content-insights/ContentInsightsSummary.js.map +1 -0
  286. package/es/features/content-insights/ContentInsightsSummary.scss +12 -0
  287. package/es/features/content-insights/ContentInsightsSummaryGhostState.js +19 -0
  288. package/es/features/content-insights/ContentInsightsSummaryGhostState.js.map +1 -0
  289. package/es/features/content-insights/ContentInsightsSummaryGhostState.scss +9 -0
  290. package/es/features/content-insights/GraphCardGhostState.js +25 -0
  291. package/es/features/content-insights/GraphCardGhostState.js.map +1 -0
  292. package/es/features/content-insights/GraphCardGhostState.scss +18 -0
  293. package/es/features/content-insights/GraphCardPreviewsSummary.js +30 -0
  294. package/es/features/content-insights/GraphCardPreviewsSummary.js.map +1 -0
  295. package/es/features/content-insights/GraphCardPreviewsSummary.scss +10 -0
  296. package/es/features/content-insights/GraphGhostState.js +21 -0
  297. package/es/features/content-insights/GraphGhostState.js.map +1 -0
  298. package/es/features/content-insights/GraphGhostState.scss +11 -0
  299. package/es/features/content-insights/HeaderWithCount.js +23 -0
  300. package/es/features/content-insights/HeaderWithCount.js.map +1 -0
  301. package/es/features/content-insights/HeaderWithCount.scss +10 -0
  302. package/es/features/content-insights/MetricSummary.js +85 -0
  303. package/es/features/content-insights/MetricSummary.js.map +1 -0
  304. package/es/features/content-insights/MetricSummary.scss +14 -0
  305. package/es/features/content-insights/OpenContentInsightsButton.js +16 -0
  306. package/es/features/content-insights/OpenContentInsightsButton.js.map +1 -0
  307. package/es/features/content-insights/TrendPill.js +61 -0
  308. package/es/features/content-insights/TrendPill.js.map +1 -0
  309. package/es/features/content-insights/TrendPill.scss +33 -0
  310. package/es/features/content-insights/_mixins.scss +7 -0
  311. package/es/features/content-insights/_variables.scss +4 -0
  312. package/es/features/content-insights/charts/bar/Bar.js +57 -0
  313. package/es/features/content-insights/charts/bar/Bar.js.map +1 -0
  314. package/es/features/content-insights/charts/bar/Bar.scss +27 -0
  315. package/es/features/content-insights/charts/bar/BarChart.js +70 -0
  316. package/es/features/content-insights/charts/bar/BarChart.js.map +1 -0
  317. package/es/features/content-insights/charts/bar/BarChart.scss +56 -0
  318. package/es/features/content-insights/charts/types.js +2 -0
  319. package/es/{common/types/threadedComments.js.map → features/content-insights/charts/types.js.map} +1 -1
  320. package/es/features/content-insights/constants.js +54 -0
  321. package/es/features/content-insights/constants.js.map +1 -0
  322. package/es/features/content-insights/messages.js +69 -0
  323. package/es/features/content-insights/messages.js.map +1 -0
  324. package/es/features/content-insights/numberUtils.js +10 -0
  325. package/es/features/content-insights/numberUtils.js.map +1 -0
  326. package/es/features/content-insights/types.js +2 -0
  327. package/es/features/content-insights/types.js.map +1 -0
  328. package/es/features/item-details/ItemProperties.scss +1 -1
  329. package/es/features/shared-link-settings-modal/SharedLinkSettingsModal.js +5 -3
  330. package/es/features/shared-link-settings-modal/SharedLinkSettingsModal.js.flow +4 -2
  331. package/es/features/shared-link-settings-modal/SharedLinkSettingsModal.js.map +1 -1
  332. package/es/features/unified-share-modal/ContactRestrictionNotice.js +34 -8
  333. package/es/features/unified-share-modal/ContactRestrictionNotice.js.flow +36 -6
  334. package/es/features/unified-share-modal/ContactRestrictionNotice.js.map +1 -1
  335. package/es/features/unified-share-modal/EmailForm.js +59 -47
  336. package/es/features/unified-share-modal/EmailForm.js.flow +31 -13
  337. package/es/features/unified-share-modal/EmailForm.js.map +1 -1
  338. package/es/features/unified-share-modal/UnifiedShareForm.js +112 -103
  339. package/es/features/unified-share-modal/UnifiedShareForm.js.flow +25 -8
  340. package/es/features/unified-share-modal/UnifiedShareForm.js.map +1 -1
  341. package/es/features/unified-share-modal/UnifiedShareModal.js +1 -0
  342. package/es/features/unified-share-modal/UnifiedShareModal.js.flow +1 -0
  343. package/es/features/unified-share-modal/UnifiedShareModal.js.map +1 -1
  344. package/es/features/unified-share-modal/flowTypes.js.flow +4 -2
  345. package/es/features/unified-share-modal/flowTypes.js.map +1 -1
  346. package/es/features/unified-share-modal/messages.js +12 -8
  347. package/es/features/unified-share-modal/messages.js.flow +14 -8
  348. package/es/features/unified-share-modal/messages.js.map +1 -1
  349. package/es/features/unified-share-modal/utils/hasRestrictedContacts.js +9 -4
  350. package/es/features/unified-share-modal/utils/hasRestrictedContacts.js.flow +10 -3
  351. package/es/features/unified-share-modal/utils/hasRestrictedContacts.js.map +1 -1
  352. package/es/features/unified-share-modal/utils/isRestrictedContact.js +15 -0
  353. package/es/features/unified-share-modal/utils/isRestrictedContact.js.flow +21 -0
  354. package/es/features/unified-share-modal/utils/isRestrictedContact.js.map +1 -0
  355. package/es/icon/fill/Alert16.js +3 -2
  356. package/es/icon/fill/Alert16.js.flow +3 -2
  357. package/es/icon/fill/Alert16.js.map +1 -1
  358. package/es/icon/fill/AlertBadge16.js +31 -0
  359. package/es/icon/fill/AlertBadge16.js.flow +29 -0
  360. package/es/icon/fill/AlertBadge16.js.map +1 -0
  361. package/es/icon/fill/AlertBadge16.stories.js +13 -0
  362. package/es/icon/fill/AlertBadge16.stories.js.map +1 -0
  363. package/es/icon/fill/Info16.js +2 -2
  364. package/es/icon/fill/Info16.js.flow +1 -1
  365. package/es/icon/fill/Info16.js.map +1 -1
  366. package/es/icon/fill/InfoBadge16.js +30 -0
  367. package/es/icon/fill/InfoBadge16.js.flow +28 -0
  368. package/es/icon/fill/InfoBadge16.js.map +1 -0
  369. package/es/icon/fill/InfoBadge16.stories.js +13 -0
  370. package/es/icon/fill/InfoBadge16.stories.js.map +1 -0
  371. package/es/icon/line/AlertBubble16.js +31 -0
  372. package/es/icon/line/AlertBubble16.js.flow +29 -0
  373. package/es/icon/line/AlertBubble16.js.map +1 -0
  374. package/es/icon/line/AlertBubble16.stories.js +13 -0
  375. package/es/icon/line/AlertBubble16.stories.js.map +1 -0
  376. package/es/icon/line/AvatarXBadge16.js +45 -0
  377. package/es/icon/line/AvatarXBadge16.js.flow +39 -0
  378. package/es/icon/line/AvatarXBadge16.js.map +1 -0
  379. package/es/icon/line/AvatarXBadge16.stories.js +13 -0
  380. package/es/icon/line/AvatarXBadge16.stories.js.map +1 -0
  381. package/es/icon/line/CoEdit16.js +32 -0
  382. package/es/icon/line/CoEdit16.js.flow +30 -0
  383. package/es/icon/line/CoEdit16.js.map +1 -0
  384. package/es/icon/line/CoEdit16.stories.js +13 -0
  385. package/es/icon/line/CoEdit16.stories.js.map +1 -0
  386. package/es/icon/line/Collaborations16.js +32 -0
  387. package/es/icon/line/Collaborations16.js.flow +30 -0
  388. package/es/icon/line/Collaborations16.js.map +1 -0
  389. package/es/icon/line/Collaborations16.stories.js +13 -0
  390. package/es/icon/line/Collaborations16.stories.js.map +1 -0
  391. package/es/icon/line/CommentBubble16.js +35 -0
  392. package/es/icon/line/CommentBubble16.js.flow +34 -0
  393. package/es/icon/line/CommentBubble16.js.map +1 -0
  394. package/es/icon/line/CommentBubble16.stories.js +13 -0
  395. package/es/icon/line/CommentBubble16.stories.js.map +1 -0
  396. package/es/src/components/accessible-svg/AccessibleSVG.stories.d.ts +7 -0
  397. package/es/src/components/badge/Badge.stories.d.ts +0 -3
  398. package/es/src/components/badge/BetaBadge.stories.d.ts +6 -0
  399. package/es/src/components/badge/TrialBadge.stories.d.ts +6 -0
  400. package/es/src/components/badge/UpgradeBadge.stories.d.ts +6 -0
  401. package/es/src/components/draggable-list/DraggableList.stories.d.ts +3 -3
  402. package/es/src/components/infinite-scroll/InfiniteScroll.d.ts +1 -1
  403. package/es/src/components/tooltip/Tooltip.d.ts +2 -0
  404. package/es/src/elements/common/annotator-context/__tests__/useAnnotatorEvents.test.d.ts +1 -0
  405. package/es/src/elements/common/annotator-context/index.d.ts +1 -0
  406. package/es/src/elements/common/annotator-context/types.d.ts +28 -6
  407. package/es/src/elements/common/annotator-context/useAnnotatorEvents.d.ts +52 -0
  408. package/es/src/elements/common/annotator-context/withAnnotations.d.ts +11 -2
  409. package/es/src/elements/common/annotator-context/withAnnotatorContext.d.ts +6 -2
  410. package/es/src/elements/common/current-user/__tests__/withCurrentUser.test.d.ts +1 -0
  411. package/es/src/elements/common/current-user/index.d.ts +2 -0
  412. package/es/src/elements/common/current-user/withCurrentUser.d.ts +20 -0
  413. package/es/src/elements/content-sidebar/SidebarContentInsights.d.ts +15 -0
  414. package/es/src/elements/content-sidebar/__tests__/SidebarContentInsights.test.d.ts +1 -0
  415. package/es/src/elements/content-sidebar/activity-feed/activity-feed/fixtures.d.ts +55 -0
  416. package/es/src/features/content-insights/CompactCount.d.ts +15 -0
  417. package/es/src/features/content-insights/ContentAnalyticsErrorState.d.ts +7 -0
  418. package/es/src/features/content-insights/ContentInsightsSummary.d.ts +12 -0
  419. package/es/src/features/content-insights/ContentInsightsSummaryGhostState.d.ts +3 -0
  420. package/es/src/features/content-insights/GraphCardGhostState.d.ts +3 -0
  421. package/es/src/features/content-insights/GraphCardPreviewsSummary.d.ts +16 -0
  422. package/es/src/features/content-insights/GraphGhostState.d.ts +3 -0
  423. package/es/src/features/content-insights/HeaderWithCount.d.ts +7 -0
  424. package/es/src/features/content-insights/MetricSummary.d.ts +18 -0
  425. package/es/src/features/content-insights/OpenContentInsightsButton.d.ts +5 -0
  426. package/es/src/features/content-insights/TrendPill.d.ts +15 -0
  427. package/es/src/features/content-insights/__tests__/CompactCount.test.d.ts +1 -0
  428. package/es/src/features/content-insights/__tests__/ContentAnalyticsErrorState.test.d.ts +1 -0
  429. package/es/src/features/content-insights/__tests__/ContentInsightsSummary.test.d.ts +1 -0
  430. package/es/src/features/content-insights/__tests__/GraphCardPreviewsSummary.test.d.ts +1 -0
  431. package/es/src/features/content-insights/__tests__/HeaderWithCount.test.d.ts +1 -0
  432. package/es/src/features/content-insights/__tests__/MetricSummary.test.d.ts +1 -0
  433. package/es/src/features/content-insights/charts/bar/Bar.d.ts +11 -0
  434. package/es/src/features/content-insights/charts/bar/BarChart.d.ts +19 -0
  435. package/es/src/features/content-insights/charts/bar/__tests__/Bar.test.d.ts +1 -0
  436. package/es/src/features/content-insights/charts/bar/__tests__/BarChart.test.d.ts +1 -0
  437. package/es/src/features/content-insights/charts/types.d.ts +2 -0
  438. package/es/src/features/content-insights/constants.d.ts +27 -0
  439. package/es/src/features/content-insights/messages.d.ts +83 -0
  440. package/es/src/features/content-insights/numberUtils.d.ts +3 -0
  441. package/es/src/features/content-insights/types.d.ts +24 -0
  442. package/es/src/icon/fill/AlertBadge16.d.ts +13 -0
  443. package/es/src/icon/fill/AlertBadge16.stories.d.ts +9 -0
  444. package/es/src/icon/fill/InfoBadge16.d.ts +13 -0
  445. package/es/src/icon/fill/InfoBadge16.stories.d.ts +9 -0
  446. package/es/src/icon/line/AlertBubble16.d.ts +13 -0
  447. package/es/src/icon/line/AlertBubble16.stories.d.ts +9 -0
  448. package/es/src/icon/line/AvatarXBadge16.d.ts +13 -0
  449. package/es/src/icon/line/AvatarXBadge16.stories.d.ts +9 -0
  450. package/es/src/icon/line/CoEdit16.d.ts +13 -0
  451. package/es/src/icon/line/CoEdit16.stories.d.ts +9 -0
  452. package/es/src/icon/line/Collaborations16.d.ts +13 -0
  453. package/es/src/icon/line/Collaborations16.stories.d.ts +9 -0
  454. package/es/src/icon/line/CommentBubble16.d.ts +13 -0
  455. package/es/src/icon/line/CommentBubble16.stories.d.ts +9 -0
  456. package/es/src/styles/variables.d.ts +3 -1
  457. package/es/styles/constants/_layout.scss +1 -1
  458. package/es/styles/constants/_media-queries.scss +2 -0
  459. package/es/styles/variables.js +6 -2
  460. package/es/styles/variables.js.flow +4 -2
  461. package/es/styles/variables.js.map +1 -1
  462. package/es/utils/error.js +5 -1
  463. package/es/utils/error.js.flow +5 -1
  464. package/es/utils/error.js.map +1 -1
  465. package/es/utils/fields.js +8 -3
  466. package/es/utils/fields.js.flow +21 -3
  467. package/es/utils/fields.js.map +1 -1
  468. package/es/utils/sorter.js.flow +2 -2
  469. package/es/utils/sorter.js.map +1 -1
  470. package/i18n/bn-IN.js +45 -7
  471. package/i18n/bn-IN.properties +83 -7
  472. package/i18n/da-DK.js +45 -7
  473. package/i18n/da-DK.properties +83 -7
  474. package/i18n/de-DE.js +45 -7
  475. package/i18n/de-DE.properties +83 -7
  476. package/i18n/en-AU.js +45 -7
  477. package/i18n/en-AU.properties +83 -7
  478. package/i18n/en-CA.js +45 -7
  479. package/i18n/en-CA.properties +83 -7
  480. package/i18n/en-GB.js +45 -7
  481. package/i18n/en-GB.properties +83 -7
  482. package/i18n/en-US.js +45 -7
  483. package/i18n/en-US.properties +83 -7
  484. package/i18n/en-x-pseudo.js +891 -854
  485. package/i18n/en-x-pseudo.properties +941 -843
  486. package/i18n/es-419.js +45 -7
  487. package/i18n/es-419.properties +83 -7
  488. package/i18n/es-ES.js +45 -7
  489. package/i18n/es-ES.properties +83 -7
  490. package/i18n/fi-FI.js +45 -7
  491. package/i18n/fi-FI.properties +83 -7
  492. package/i18n/fr-CA.js +45 -7
  493. package/i18n/fr-CA.properties +83 -7
  494. package/i18n/fr-FR.js +45 -7
  495. package/i18n/fr-FR.properties +83 -7
  496. package/i18n/hi-IN.js +45 -7
  497. package/i18n/hi-IN.properties +83 -7
  498. package/i18n/it-IT.js +45 -7
  499. package/i18n/it-IT.properties +83 -7
  500. package/i18n/ja-JP.js +47 -9
  501. package/i18n/ja-JP.properties +85 -9
  502. package/i18n/ko-KR.js +45 -7
  503. package/i18n/ko-KR.properties +83 -7
  504. package/i18n/nb-NO.js +45 -7
  505. package/i18n/nb-NO.properties +83 -7
  506. package/i18n/nl-NL.js +45 -7
  507. package/i18n/nl-NL.properties +83 -7
  508. package/i18n/pl-PL.js +45 -7
  509. package/i18n/pl-PL.properties +83 -7
  510. package/i18n/pt-BR.js +45 -7
  511. package/i18n/pt-BR.properties +83 -7
  512. package/i18n/ru-RU.js +45 -7
  513. package/i18n/ru-RU.properties +83 -7
  514. package/i18n/sv-SE.js +45 -7
  515. package/i18n/sv-SE.properties +83 -7
  516. package/i18n/tr-TR.js +45 -7
  517. package/i18n/tr-TR.properties +83 -7
  518. package/i18n/zh-CN.js +45 -7
  519. package/i18n/zh-CN.properties +83 -7
  520. package/i18n/zh-TW.js +45 -7
  521. package/i18n/zh-TW.properties +83 -7
  522. package/package.json +7 -8
  523. package/src/__mocks__/react-intl.js +4 -0
  524. package/src/api/APIFactory.js +26 -0
  525. package/src/api/Annotations.js +60 -6
  526. package/src/api/Comments.js +5 -4
  527. package/src/api/Feed.js +677 -17
  528. package/src/api/FileCollaborators.js +30 -0
  529. package/src/api/ThreadedComments.js +54 -29
  530. package/src/api/__tests__/Annotations.test.js +77 -3
  531. package/src/api/__tests__/Feed.test.js +698 -85
  532. package/src/api/__tests__/FileCollaborators.test.js +41 -0
  533. package/src/api/__tests__/ThreadedComments.test.js +47 -10
  534. package/src/api/__tests__/utils.test.js +11 -0
  535. package/src/api/fixtures.js +401 -0
  536. package/src/api/messages.js +5 -0
  537. package/src/api/utils.js +30 -0
  538. package/src/common/types/annotations.js +18 -12
  539. package/src/common/types/feed.js +40 -4
  540. package/src/components/accessible-svg/AccessibleSVG.stories.tsx +18 -0
  541. package/src/components/badge/Badge.stories.md +1 -7
  542. package/src/components/badge/Badge.stories.tsx +1 -10
  543. package/src/components/badge/BetaBadge.stories.tsx +9 -0
  544. package/src/components/badge/TrialBadge.stories.tsx +9 -0
  545. package/src/components/badge/UpgradeBadge.stories.tsx +9 -0
  546. package/src/components/breadcrumb/Breadcrumb.js +68 -42
  547. package/src/components/breadcrumb/EllipsisCrumb.js +10 -6
  548. package/src/components/count-badge/CountBadge.stories.tsx +1 -1
  549. package/src/components/draggable-list/DraggableList.stories.tsx +72 -5
  550. package/src/components/dropdown-menu/DropdownMenu.js +11 -0
  551. package/src/components/dropdown-menu/DropdownMenu.scss +3 -3
  552. package/src/components/dropdown-menu/__tests__/DropdownMenu.test.js +38 -0
  553. package/src/components/grid-view/__tests__/__snapshots__/GridViewSlider.test.js.snap +1 -0
  554. package/src/components/infinite-scroll/InfiniteScroll.md +1 -1
  555. package/src/components/infinite-scroll/InfiniteScroll.tsx +5 -2
  556. package/src/components/infinite-scroll/__tests__/InfiniteScroll.test.tsx +115 -127
  557. package/src/components/modal/Modal.scss +5 -1
  558. package/src/components/search-form/SearchForm.js +1 -1
  559. package/src/components/search-form/__tests__/SearchForm.test.js +25 -6
  560. package/src/components/sidebar-toggle-button/__tests__/__snapshots__/SidebarToggleButton.test.js.snap +4 -0
  561. package/src/components/table/__tests__/makeSelectable.test.js +654 -144
  562. package/src/components/table/makeSelectable.js +299 -98
  563. package/src/components/time/__tests__/ReadableTime.test.js +0 -1
  564. package/src/components/tooltip/Tooltip.tsx +5 -2
  565. package/src/components/tooltip/__tests__/Tooltip.test.tsx +10 -0
  566. package/src/components/tooltip/__tests__/__snapshots__/Tooltip.test.tsx.snap +1 -1
  567. package/src/constants.js +11 -0
  568. package/src/elements/common/annotator-context/__tests__/useAnnotatorEvents.test.tsx +509 -0
  569. package/src/elements/common/annotator-context/__tests__/withAnnotations.test.tsx +275 -12
  570. package/src/elements/common/annotator-context/__tests__/withAnnotatorContext.test.tsx +18 -6
  571. package/src/elements/common/annotator-context/index.js.flow +4 -0
  572. package/src/elements/common/annotator-context/index.ts +1 -0
  573. package/src/elements/common/annotator-context/types.js.flow +77 -35
  574. package/src/elements/common/annotator-context/types.ts +28 -6
  575. package/src/elements/common/annotator-context/useAnnotatorEvents.js.flow +52 -0
  576. package/src/elements/common/annotator-context/useAnnotatorEvents.ts +190 -0
  577. package/src/elements/common/annotator-context/withAnnotations.js.flow +73 -36
  578. package/src/elements/common/annotator-context/withAnnotations.tsx +170 -7
  579. package/src/elements/common/annotator-context/withAnnotatorContext.js.flow +29 -9
  580. package/src/elements/common/annotator-context/withAnnotatorContext.tsx +28 -5
  581. package/src/elements/common/current-user/__tests__/withCurrentUser.test.tsx +108 -0
  582. package/src/elements/common/current-user/index.js.flow +8 -0
  583. package/src/elements/common/current-user/index.ts +2 -0
  584. package/src/elements/common/current-user/withCurrentUser.js.flow +40 -0
  585. package/src/elements/common/current-user/withCurrentUser.tsx +139 -0
  586. package/src/elements/common/flowTypes.js +22 -4
  587. package/src/elements/common/interactionTargets.js +2 -0
  588. package/src/elements/common/logger/Logger.js +1 -1
  589. package/src/elements/common/messages.js +5 -0
  590. package/src/elements/content-explorer/DeleteConfirmationDialog.js +3 -1
  591. package/src/elements/content-explorer/DeleteConfirmationDialog.scss +5 -0
  592. package/src/elements/content-explorer/stories/DeleteConfirmationDialog.stories.js +60 -0
  593. package/src/elements/content-explorer/stories/DeleteConfirmationDialog.stories.md +1 -0
  594. package/src/elements/content-sidebar/ActivitySidebar.js +381 -154
  595. package/src/elements/content-sidebar/ActivitySidebarFilter.js +59 -0
  596. package/src/elements/content-sidebar/ActivitySidebarFilter.scss +4 -0
  597. package/src/elements/content-sidebar/DetailsSidebar.js +32 -4
  598. package/src/elements/content-sidebar/Sidebar.js +6 -1
  599. package/src/elements/content-sidebar/SidebarContentInsights.scss +6 -0
  600. package/src/elements/content-sidebar/SidebarContentInsights.tsx +57 -0
  601. package/src/elements/content-sidebar/SidebarPanels.js +4 -0
  602. package/src/elements/content-sidebar/__tests__/ActivitySidebar.test.js +533 -243
  603. package/src/elements/content-sidebar/__tests__/ActivitySidebarFilter.test.js +54 -0
  604. package/src/elements/content-sidebar/__tests__/DetailsSidebar.test.js +45 -0
  605. package/src/elements/content-sidebar/__tests__/Sidebar.test.js +1 -1
  606. package/src/elements/content-sidebar/__tests__/SidebarContentInsights.test.tsx +56 -0
  607. package/src/elements/content-sidebar/__tests__/SidebarPanels.test.js +4 -3
  608. package/src/elements/content-sidebar/__tests__/__snapshots__/ActivitySidebar.test.js.snap +29 -15
  609. package/src/elements/content-sidebar/__tests__/__snapshots__/SidebarFileProperties.test.js.snap +1 -0
  610. package/src/elements/content-sidebar/__tests__/withSidebarAnnotations.test.js +325 -32
  611. package/src/elements/content-sidebar/activity-feed/activity-feed/ActiveState.js +122 -24
  612. package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityFeed.js +59 -18
  613. package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.js +126 -0
  614. package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThread.scss +17 -0
  615. package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.js +85 -0
  616. package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplies.scss +16 -0
  617. package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.js +59 -0
  618. package/src/elements/content-sidebar/activity-feed/activity-feed/ActivityThreadReplyForm.scss +22 -0
  619. package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/ActiveState.test.js +19 -5
  620. package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/ActivityFeed.test.js +22 -16
  621. package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/ActivityThread.test.js +80 -0
  622. package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/ActivityThreadReplies.test.js +24 -0
  623. package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/ActivityThreadRepliesForm.test.js +47 -0
  624. package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/__snapshots__/ActiveState.test.js.snap +74 -43
  625. package/src/elements/content-sidebar/activity-feed/activity-feed/__tests__/activityFeedUtils.test.js +8 -8
  626. package/src/elements/content-sidebar/activity-feed/activity-feed/activityFeedUtils.js +2 -2
  627. package/src/elements/content-sidebar/activity-feed/activity-feed/fixtures.ts +56 -0
  628. package/src/elements/content-sidebar/activity-feed/activity-feed/messages.js +20 -0
  629. package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.js +117 -0
  630. package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThread.scss +7 -0
  631. package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.js +105 -0
  632. package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadContent.scss +5 -0
  633. package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.js +86 -0
  634. package/src/elements/content-sidebar/activity-feed/annotation-thread/AnnotationThreadCreate.scss +3 -0
  635. package/src/elements/content-sidebar/activity-feed/annotation-thread/__tests__/AnnotationThread.test.js +28 -0
  636. package/src/elements/content-sidebar/activity-feed/annotation-thread/__tests__/AnnotationThreadContent.test.js +89 -0
  637. package/src/elements/content-sidebar/activity-feed/annotation-thread/__tests__/AnnotationThreadCreate.test.js +103 -0
  638. package/src/elements/content-sidebar/activity-feed/annotation-thread/__tests__/useAnnotationAPI.test.js +202 -0
  639. package/src/elements/content-sidebar/activity-feed/annotation-thread/__tests__/useRepliesAPI.test.js +99 -0
  640. package/src/elements/content-sidebar/activity-feed/annotation-thread/errors.js +26 -0
  641. package/src/elements/content-sidebar/activity-feed/annotation-thread/index.js +1 -0
  642. package/src/elements/content-sidebar/activity-feed/annotation-thread/messages.js +21 -0
  643. package/src/elements/content-sidebar/activity-feed/annotation-thread/useAnnotationAPI.js +203 -0
  644. package/src/elements/content-sidebar/activity-feed/annotation-thread/useRepliesAPI.js +121 -0
  645. package/src/elements/content-sidebar/activity-feed/annotations/AnnotationActivity.js +24 -4
  646. package/src/elements/content-sidebar/activity-feed/annotations/AnnotationActivityMenu.js +36 -2
  647. package/src/elements/content-sidebar/activity-feed/annotations/__tests__/AnnotationActivity.test.js +14 -10
  648. package/src/elements/content-sidebar/activity-feed/annotations/__tests__/AnnotationActivityMenu.test.js +35 -1
  649. package/src/elements/content-sidebar/activity-feed/annotations/messages.js +10 -0
  650. package/src/elements/content-sidebar/activity-feed/comment/Comment.js +54 -10
  651. package/src/elements/content-sidebar/activity-feed/comment/__tests__/Comment.test.js +152 -7
  652. package/src/elements/content-sidebar/activity-feed/comment/__tests__/__snapshots__/Comment.test.js.snap +12 -7
  653. package/src/elements/content-sidebar/activity-feed/comment/messages.js +10 -0
  654. package/src/elements/content-sidebar/activity-feed/comment-form/CommentForm.js +3 -1
  655. package/src/elements/content-sidebar/activity-feed/comment-form/__tests__/CommentForm.test.js +11 -0
  656. package/src/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.js +34 -4
  657. package/src/elements/content-sidebar/activity-feed/common/activity-message/ActivityMessage.scss +40 -3
  658. package/src/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessage.js +42 -0
  659. package/src/elements/content-sidebar/activity-feed/common/activity-message/CollapsableMessageToggle.js +24 -0
  660. package/src/elements/content-sidebar/activity-feed/common/activity-message/__tests__/ActivityMessage.test.js +48 -1
  661. package/src/elements/content-sidebar/activity-feed/common/activity-message/messages.js +15 -0
  662. package/src/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.js +30 -0
  663. package/src/elements/content-sidebar/activity-feed/common/activity-status/ActivityStatus.scss +6 -0
  664. package/src/elements/content-sidebar/activity-feed/common/activity-status/__tests__/ActivityStatus.test.js +19 -0
  665. package/src/elements/content-sidebar/activity-feed/common/activity-status/index.js +2 -0
  666. package/src/elements/content-sidebar/activity-feed/common/activity-status/messages.js +13 -0
  667. package/src/elements/content-sidebar/activity-feed/common/activity-timestamp/ActivityTimestamp.scss +1 -1
  668. package/src/elements/content-sidebar/activity-feed/task-new/__tests__/Task.test.js +4 -3
  669. package/src/elements/content-sidebar/activity-feed/task-new/__tests__/__snapshots__/Task.test.js.snap +1 -2
  670. package/src/elements/content-sidebar/fixtures.js +185 -0
  671. package/src/elements/content-sidebar/flowTypes.js +9 -25
  672. package/src/elements/content-sidebar/messages.js +10 -0
  673. package/src/elements/content-sidebar/withErrorHandling.js +1 -1
  674. package/src/elements/content-sidebar/withSidebarAnnotations.js +162 -11
  675. package/src/elements/content-uploader/OverallUploadsProgressBar.js +11 -12
  676. package/src/features/classification/Classification.scss +1 -1
  677. package/src/features/classification/security-controls/SecurityControlsItem.scss +1 -0
  678. package/src/features/classification/security-controls/__tests__/__snapshots__/utils.test.js.snap +18 -16
  679. package/src/features/classification/security-controls/__tests__/utils.test.js +13 -5
  680. package/src/features/classification/security-controls/messages.js +10 -0
  681. package/src/features/classification/security-controls/utils.js +8 -12
  682. package/src/features/collapsible-sidebar/__tests__/__snapshots__/CollapsibleSidebarLogo.test.js.snap +2 -0
  683. package/src/features/content-explorer/content-explorer/ContentExplorer.js +4 -0
  684. package/src/features/content-explorer/content-explorer/ContentExplorer.scss +4 -0
  685. package/src/features/content-explorer/content-explorer/ContentExplorerBreadcrumbs.js +14 -11
  686. package/src/features/content-explorer/content-explorer/ContentExplorerHeaderActions.js +4 -1
  687. package/src/features/content-explorer/content-explorer/__tests__/ContentExplorerBreadcrumbs.test.js +2 -2
  688. package/src/features/content-explorer/content-explorer-modal/ContentExplorerModal.js +5 -1
  689. package/src/features/content-explorer/content-explorer-modal/__tests__/__snapshots__/ContentExplorerModal.test.js.snap +1 -0
  690. package/src/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js +5 -1
  691. package/src/features/content-explorer/prop-types.js +8 -0
  692. package/src/features/content-insights/CompactCount.tsx +23 -0
  693. package/src/features/content-insights/ContentAnalyticsErrorState.scss +17 -0
  694. package/src/features/content-insights/ContentAnalyticsErrorState.tsx +44 -0
  695. package/src/features/content-insights/ContentInsightsSummary.scss +12 -0
  696. package/src/features/content-insights/ContentInsightsSummary.tsx +45 -0
  697. package/src/features/content-insights/ContentInsightsSummaryGhostState.scss +9 -0
  698. package/src/features/content-insights/ContentInsightsSummaryGhostState.tsx +18 -0
  699. package/src/features/content-insights/GraphCardGhostState.scss +18 -0
  700. package/src/features/content-insights/GraphCardGhostState.tsx +18 -0
  701. package/src/features/content-insights/GraphCardPreviewsSummary.scss +10 -0
  702. package/src/features/content-insights/GraphCardPreviewsSummary.tsx +40 -0
  703. package/src/features/content-insights/GraphGhostState.scss +11 -0
  704. package/src/features/content-insights/GraphGhostState.tsx +17 -0
  705. package/src/features/content-insights/HeaderWithCount.scss +10 -0
  706. package/src/features/content-insights/HeaderWithCount.tsx +24 -0
  707. package/src/features/content-insights/MetricSummary.scss +14 -0
  708. package/src/features/content-insights/MetricSummary.tsx +65 -0
  709. package/src/features/content-insights/OpenContentInsightsButton.tsx +20 -0
  710. package/src/features/content-insights/TrendPill.scss +33 -0
  711. package/src/features/content-insights/TrendPill.tsx +70 -0
  712. package/src/features/content-insights/__tests__/CompactCount.test.tsx +57 -0
  713. package/src/features/content-insights/__tests__/ContentAnalyticsErrorState.test.tsx +33 -0
  714. package/src/features/content-insights/__tests__/ContentInsightsSummary.test.tsx +81 -0
  715. package/src/features/content-insights/__tests__/GraphCardPreviewsSummary.test.tsx +35 -0
  716. package/src/features/content-insights/__tests__/HeaderWithCount.test.tsx +26 -0
  717. package/src/features/content-insights/__tests__/MetricSummary.test.tsx +88 -0
  718. package/src/features/content-insights/_mixins.scss +7 -0
  719. package/src/features/content-insights/_variables.scss +4 -0
  720. package/src/features/content-insights/charts/bar/Bar.scss +27 -0
  721. package/src/features/content-insights/charts/bar/Bar.tsx +48 -0
  722. package/src/features/content-insights/charts/bar/BarChart.scss +56 -0
  723. package/src/features/content-insights/charts/bar/BarChart.tsx +78 -0
  724. package/src/features/content-insights/charts/bar/__tests__/Bar.test.tsx +74 -0
  725. package/src/features/content-insights/charts/bar/__tests__/BarChart.test.tsx +110 -0
  726. package/src/features/content-insights/charts/types.ts +3 -0
  727. package/src/features/content-insights/constants.ts +60 -0
  728. package/src/features/content-insights/messages.ts +90 -0
  729. package/src/features/content-insights/numberUtils.ts +9 -0
  730. package/src/features/content-insights/types.ts +33 -0
  731. package/src/features/item-details/ItemProperties.scss +1 -1
  732. package/src/features/shared-link-settings-modal/SharedLinkSettingsModal.js +4 -2
  733. package/src/features/shared-link-settings-modal/__tests__/SharedLinkSettingsModal.test.js +22 -3
  734. package/src/features/shared-link-settings-modal/__tests__/__snapshots__/SharedLinkSettingsModal.test.js.snap +2 -1
  735. package/src/features/unified-share-modal/ContactRestrictionNotice.js +36 -6
  736. package/src/features/unified-share-modal/EmailForm.js +31 -13
  737. package/src/features/unified-share-modal/UnifiedShareForm.js +25 -8
  738. package/src/features/unified-share-modal/UnifiedShareModal.js +1 -0
  739. package/src/features/unified-share-modal/__tests__/ContactRestrictionNotice.test.js +55 -6
  740. package/src/features/unified-share-modal/__tests__/EmailForm.test.js +131 -24
  741. package/src/features/unified-share-modal/__tests__/UnifiedShareForm.test.js +89 -35
  742. package/src/features/unified-share-modal/__tests__/__snapshots__/UnifiedShareForm.test.js.snap +16 -0
  743. package/src/features/unified-share-modal/__tests__/__snapshots__/UnifiedShareModal.test.js.snap +17 -0
  744. package/src/features/unified-share-modal/flowTypes.js +4 -2
  745. package/src/features/unified-share-modal/messages.js +14 -8
  746. package/src/features/unified-share-modal/utils/__tests__/hasRestrictedContacts.test.js +24 -10
  747. package/src/features/unified-share-modal/utils/__tests__/isRestrictedContact.test.js +33 -0
  748. package/src/features/unified-share-modal/utils/hasRestrictedContacts.js +10 -3
  749. package/src/features/unified-share-modal/utils/isRestrictedContact.js +21 -0
  750. package/src/features/virtualized-table/__tests__/__snapshots__/VirtualizedTable.test.js.snap +1 -0
  751. package/src/icon/fill/Alert16.js.flow +3 -2
  752. package/src/icon/fill/Alert16.tsx +3 -2
  753. package/src/icon/fill/AlertBadge16.js.flow +29 -0
  754. package/src/icon/fill/AlertBadge16.stories.tsx +13 -0
  755. package/src/icon/fill/AlertBadge16.tsx +27 -0
  756. package/src/icon/fill/Info16.js.flow +1 -1
  757. package/src/icon/fill/Info16.tsx +1 -1
  758. package/src/icon/fill/InfoBadge16.js.flow +28 -0
  759. package/src/icon/fill/InfoBadge16.stories.tsx +13 -0
  760. package/src/icon/fill/InfoBadge16.tsx +26 -0
  761. package/src/icon/line/AlertBubble16.js.flow +29 -0
  762. package/src/icon/line/AlertBubble16.stories.tsx +13 -0
  763. package/src/icon/line/AlertBubble16.tsx +27 -0
  764. package/src/icon/line/AvatarXBadge16.js.flow +39 -0
  765. package/src/icon/line/AvatarXBadge16.stories.tsx +13 -0
  766. package/src/icon/line/AvatarXBadge16.tsx +37 -0
  767. package/src/icon/line/CoEdit16.js.flow +30 -0
  768. package/src/icon/line/CoEdit16.stories.tsx +13 -0
  769. package/src/icon/line/CoEdit16.tsx +28 -0
  770. package/src/icon/line/Collaborations16.js.flow +30 -0
  771. package/src/icon/line/Collaborations16.stories.tsx +13 -0
  772. package/src/icon/line/Collaborations16.tsx +28 -0
  773. package/src/icon/line/CommentBubble16.js.flow +34 -0
  774. package/src/icon/line/CommentBubble16.stories.tsx +13 -0
  775. package/src/icon/line/CommentBubble16.tsx +32 -0
  776. package/src/styles/constants/_layout.scss +1 -1
  777. package/src/styles/constants/_media-queries.scss +2 -0
  778. package/src/styles/variables.js +4 -2
  779. package/src/styles/variables.json +4 -2
  780. package/src/styles/variables.ts +3 -1
  781. package/src/utils/__tests__/fields.test.js +23 -4
  782. package/src/utils/__tests__/sorter.test.js +3 -3
  783. package/src/utils/error.js +5 -1
  784. package/src/utils/fields.js +21 -3
  785. package/src/utils/sorter.js +2 -2
  786. package/es/common/types/threadedComments.js +0 -2
  787. package/es/common/types/threadedComments.js.flow +0 -9
  788. package/src/common/types/threadedComments.js +0 -9
@@ -7,7 +7,6 @@ import { FormattedMessage } from 'react-intl';
7
7
 
8
8
  import { Hotkeys, HotkeyRecord } from '../hotkeys';
9
9
  import messages from './messages';
10
-
11
10
  import shiftSelect from './shiftSelect';
12
11
 
13
12
  const SEARCH_TIMER_DURATION = 1000;
@@ -22,6 +21,8 @@ function makeSelectable(BaseTable) {
22
21
  className: PropTypes.string,
23
22
  /** Array of unique IDs of the items in the table. Each item should be a string or number, in the order they appear in the table. */
24
23
  data: PropTypes.array.isRequired,
24
+ gridColumnCount: PropTypes.number,
25
+ isGridView: PropTypes.bool,
25
26
  /** Called when focus changes. `(focusedIndex: number) => void` */
26
27
  onFocus: PropTypes.func,
27
28
  /** Called when selection changes. `(selectedItems: Array<string> | Array<number> | Set<string> | Set<number>) => void` */
@@ -38,6 +39,8 @@ function makeSelectable(BaseTable) {
38
39
  * with an ImmutableJS Set.
39
40
  */
40
41
  selectedItems: PropTypes.oneOfType([PropTypes.array, ImmutablePropTypes.set]),
42
+ /** Array of unique IDs of the items in the table that are loaded and accessible. If not provided, this will default to all data */
43
+ loadedData: PropTypes.array,
41
44
  enableHotkeys: PropTypes.bool,
42
45
  /** Translated type for hotkeys. If not provided, then the hotkeys will not appear in the help modal. */
43
46
  hotkeyType: PropTypes.string,
@@ -98,118 +101,261 @@ function makeSelectable(BaseTable) {
98
101
  }
99
102
  };
100
103
 
104
+ getSharedHotkeyConfigs = () => {
105
+ const { hotkeyType } = this.props;
106
+ return [
107
+ new HotkeyRecord({
108
+ key: 'shift+x',
109
+ description: <FormattedMessage {...messages.shiftXDescription} />,
110
+ handler: () => {
111
+ const { focusedIndex } = this.state;
112
+
113
+ if (focusedIndex === undefined) {
114
+ return;
115
+ }
116
+
117
+ this.selectToggle(focusedIndex);
118
+ },
119
+ type: hotkeyType,
120
+ }),
121
+ new HotkeyRecord({
122
+ key: ['meta+a', 'ctrl+a'],
123
+ description: <FormattedMessage {...messages.selectAllDescription} />,
124
+ handler: event => {
125
+ const { data } = this.props;
126
+
127
+ event.preventDefault();
128
+
129
+ this.onSelect(new Set(data), this.state.focusedIndex);
130
+ },
131
+ type: hotkeyType,
132
+ }),
133
+ new HotkeyRecord({
134
+ key: 'esc',
135
+ description: <FormattedMessage {...messages.deselectAllDescription} />,
136
+ handler: () => {
137
+ this.onSelect(new Set(), this.state.focusedIndex);
138
+ },
139
+ type: hotkeyType,
140
+ }),
141
+ ];
142
+ };
143
+
144
+ getListViewHotKeyConfigs = () => {
145
+ const { hotkeyType } = this.props;
146
+ return [
147
+ new HotkeyRecord({
148
+ key: 'down',
149
+ description: <FormattedMessage {...messages.downDescription} />,
150
+ handler: event => {
151
+ const { data } = this.props;
152
+ const { focusedIndex } = this.state;
153
+
154
+ event.preventDefault();
155
+
156
+ const newFocusedIndex =
157
+ focusedIndex !== undefined ? Math.min(focusedIndex + 1, data.length - 1) : 0;
158
+ this.setState({ focusedIndex: newFocusedIndex });
159
+ },
160
+ type: hotkeyType,
161
+ }),
162
+ new HotkeyRecord({
163
+ key: 'up',
164
+ description: <FormattedMessage {...messages.upDescription} />,
165
+ handler: event => {
166
+ const { focusedIndex = 0 } = this.state;
167
+
168
+ event.preventDefault();
169
+
170
+ const newFocusedIndex = Math.max(focusedIndex - 1, 0);
171
+ this.setState({ focusedIndex: newFocusedIndex });
172
+ },
173
+ type: hotkeyType,
174
+ }),
175
+ new HotkeyRecord({
176
+ key: 'shift+down',
177
+ description: <FormattedMessage {...messages.shiftDownDescription} />,
178
+ handler: () => {
179
+ const { data } = this.props;
180
+ const { focusedIndex } = this.state;
181
+
182
+ if (focusedIndex === undefined) {
183
+ return;
184
+ }
185
+
186
+ const newFocusedIndex = Math.min(focusedIndex + 1, data.length - 1);
187
+ this.handleShiftKeyDown(newFocusedIndex, data.length - 1);
188
+ },
189
+ type: hotkeyType,
190
+ }),
191
+ new HotkeyRecord({
192
+ key: 'shift+up',
193
+ description: <FormattedMessage {...messages.shiftUpDescription} />,
194
+ handler: () => {
195
+ const { focusedIndex } = this.state;
196
+
197
+ if (focusedIndex === undefined) {
198
+ return;
199
+ }
200
+
201
+ const newFocusedIndex = Math.max(focusedIndex - 1, 0);
202
+ this.handleShiftKeyDown(newFocusedIndex, 0);
203
+ },
204
+ type: hotkeyType,
205
+ }),
206
+ ];
207
+ };
208
+
209
+ getGridViewHotKeyConfigs = () => {
210
+ const { hotkeyType } = this.props;
211
+ return [
212
+ new HotkeyRecord({
213
+ key: 'right',
214
+ description: <FormattedMessage {...messages.downDescription} />,
215
+ handler: event => {
216
+ const { data } = this.props;
217
+ const { focusedIndex } = this.state;
218
+
219
+ event.preventDefault();
220
+
221
+ const newFocusedIndex =
222
+ focusedIndex !== undefined ? Math.min(focusedIndex + 1, data.length - 1) : 0;
223
+ this.setState({ focusedIndex: newFocusedIndex });
224
+ },
225
+ type: hotkeyType,
226
+ }),
227
+ new HotkeyRecord({
228
+ key: 'left',
229
+ description: <FormattedMessage {...messages.upDescription} />,
230
+ handler: event => {
231
+ const { focusedIndex = 0 } = this.state;
232
+
233
+ event.preventDefault();
234
+
235
+ const newFocusedIndex = Math.max(focusedIndex - 1, 0);
236
+ this.setState({ focusedIndex: newFocusedIndex });
237
+ },
238
+ type: hotkeyType,
239
+ }),
240
+ new HotkeyRecord({
241
+ key: 'down',
242
+ description: <FormattedMessage {...messages.downDescription} />,
243
+ handler: event => {
244
+ const { data, gridColumnCount } = this.props;
245
+ const { focusedIndex } = this.state;
246
+
247
+ event.preventDefault();
248
+
249
+ const newFocusedIndex =
250
+ focusedIndex !== undefined ? Math.min(focusedIndex + gridColumnCount, data.length - 1) : 0;
251
+ this.setState({ focusedIndex: newFocusedIndex });
252
+ },
253
+ type: hotkeyType,
254
+ }),
255
+ new HotkeyRecord({
256
+ key: 'up',
257
+ description: <FormattedMessage {...messages.upDescription} />,
258
+ handler: event => {
259
+ const { gridColumnCount } = this.props;
260
+ const { focusedIndex = 0 } = this.state;
261
+
262
+ event.preventDefault();
263
+
264
+ const newFocusedIndex = Math.max(focusedIndex - gridColumnCount, 0);
265
+ this.setState({ focusedIndex: newFocusedIndex });
266
+ },
267
+ type: hotkeyType,
268
+ }),
269
+ new HotkeyRecord({
270
+ key: 'shift+right',
271
+ description: <FormattedMessage {...messages.shiftDownDescription} />,
272
+ handler: () => {
273
+ const { data } = this.props;
274
+ const { focusedIndex } = this.state;
275
+
276
+ if (focusedIndex === undefined) {
277
+ return;
278
+ }
279
+
280
+ const newFocusedIndex = Math.min(focusedIndex + 1, data.length - 1);
281
+ this.handleShiftKeyDownForGrid(newFocusedIndex, data.length - 1);
282
+ },
283
+ type: hotkeyType,
284
+ }),
285
+ new HotkeyRecord({
286
+ key: 'shift+left',
287
+ description: <FormattedMessage {...messages.shiftUpDescription} />,
288
+ handler: () => {
289
+ const { focusedIndex } = this.state;
290
+
291
+ if (focusedIndex === undefined) {
292
+ return;
293
+ }
294
+
295
+ const newFocusedIndex = Math.max(focusedIndex - 1, 0);
296
+ this.handleShiftKeyDownForGrid(newFocusedIndex, 0);
297
+ },
298
+ type: hotkeyType,
299
+ }),
300
+ new HotkeyRecord({
301
+ key: 'shift+down',
302
+ description: <FormattedMessage {...messages.shiftDownDescription} />,
303
+ handler: () => {
304
+ const { data, gridColumnCount } = this.props;
305
+ const { focusedIndex } = this.state;
306
+
307
+ if (focusedIndex === undefined) {
308
+ return;
309
+ }
310
+
311
+ const newFocusedIndex = Math.min(focusedIndex + gridColumnCount, data.length - 1);
312
+ this.handleShiftKeyDownForGrid(newFocusedIndex, data.length - 1);
313
+ },
314
+ type: hotkeyType,
315
+ }),
316
+ new HotkeyRecord({
317
+ key: 'shift+up',
318
+ description: <FormattedMessage {...messages.shiftUpDescription} />,
319
+ handler: () => {
320
+ const { gridColumnCount } = this.props;
321
+ const { focusedIndex } = this.state;
322
+
323
+ if (focusedIndex === undefined) {
324
+ return;
325
+ }
326
+
327
+ const newFocusedIndex = Math.max(focusedIndex - gridColumnCount, 0);
328
+ this.handleShiftKeyDownForGrid(newFocusedIndex, 0);
329
+ },
330
+ type: hotkeyType,
331
+ }),
332
+ ];
333
+ };
334
+
101
335
  getHotkeyConfigs = () => {
102
- const { enableHotkeys, hotkeyType } = this.props;
336
+ const { enableHotkeys, isGridView, gridColumnCount } = this.props;
103
337
 
104
338
  if (!enableHotkeys && !this.hotkeys) {
105
339
  this.hotkeys = [];
106
340
  }
107
341
 
108
342
  if (!this.hotkeys) {
109
- this.hotkeys = [
110
- new HotkeyRecord({
111
- key: 'down',
112
- description: <FormattedMessage {...messages.downDescription} />,
113
- handler: event => {
114
- const { data } = this.props;
115
- const { focusedIndex } = this.state;
116
-
117
- event.preventDefault();
118
-
119
- const newFocusedIndex =
120
- focusedIndex !== undefined ? Math.min(focusedIndex + 1, data.length - 1) : 0;
121
- this.setState({ focusedIndex: newFocusedIndex });
122
- },
123
- type: hotkeyType,
124
- }),
125
- new HotkeyRecord({
126
- key: 'up',
127
- description: <FormattedMessage {...messages.upDescription} />,
128
- handler: event => {
129
- const { focusedIndex = 0 } = this.state;
130
-
131
- event.preventDefault();
132
-
133
- const newFocusedIndex = Math.max(focusedIndex - 1, 0);
134
- this.setState({ focusedIndex: newFocusedIndex });
135
- },
136
- type: hotkeyType,
137
- }),
138
- new HotkeyRecord({
139
- key: 'shift+x',
140
- description: <FormattedMessage {...messages.shiftXDescription} />,
141
- handler: () => {
142
- const { focusedIndex } = this.state;
143
-
144
- if (focusedIndex === undefined) {
145
- return;
146
- }
147
-
148
- this.selectToggle(focusedIndex);
149
- },
150
- type: hotkeyType,
151
- }),
152
- new HotkeyRecord({
153
- key: ['meta+a', 'ctrl+a'],
154
- description: <FormattedMessage {...messages.selectAllDescription} />,
155
- handler: event => {
156
- const { data } = this.props;
157
-
158
- event.preventDefault();
159
-
160
- this.onSelect(new Set(data), this.state.focusedIndex);
161
- },
162
- type: hotkeyType,
163
- }),
164
- new HotkeyRecord({
165
- key: 'shift+down',
166
- description: <FormattedMessage {...messages.shiftDownDescription} />,
167
- handler: () => {
168
- const { data } = this.props;
169
- const { focusedIndex } = this.state;
170
-
171
- if (focusedIndex === undefined) {
172
- return;
173
- }
174
-
175
- const newFocusedIndex = Math.min(focusedIndex + 1, data.length - 1);
176
- this.handleShiftKeyDown(newFocusedIndex, data.length - 1);
177
- },
178
- type: hotkeyType,
179
- }),
180
- new HotkeyRecord({
181
- key: 'shift+up',
182
- description: <FormattedMessage {...messages.shiftUpDescription} />,
183
- handler: () => {
184
- const { focusedIndex } = this.state;
185
-
186
- if (focusedIndex === undefined) {
187
- return;
188
- }
189
-
190
- const newFocusedIndex = Math.max(focusedIndex - 1, 0);
191
- this.handleShiftKeyDown(newFocusedIndex, 0);
192
- },
193
- type: hotkeyType,
194
- }),
195
- new HotkeyRecord({
196
- key: 'esc',
197
- description: <FormattedMessage {...messages.deselectAllDescription} />,
198
- handler: () => {
199
- this.onSelect(new Set(), this.state.focusedIndex);
200
- },
201
- type: hotkeyType,
202
- }),
203
- ];
343
+ const viewSpecificHotKeyConfigs =
344
+ isGridView && gridColumnCount !== undefined
345
+ ? this.getGridViewHotKeyConfigs()
346
+ : this.getListViewHotKeyConfigs();
347
+
348
+ this.hotkeys = [...this.getSharedHotkeyConfigs(), ...viewSpecificHotKeyConfigs];
204
349
  }
205
350
 
206
351
  return this.hotkeys;
207
352
  };
208
353
 
209
354
  getProcessedProps = () => {
210
- const { selectedItems } = this.props;
355
+ const { data, loadedData, selectedItems } = this.props;
211
356
  return {
212
357
  ...this.props,
358
+ loadedData: loadedData ? Set(loadedData) : Set(data),
213
359
  selectedItems: Set.isSet(selectedItems) ? selectedItems : new Set(selectedItems),
214
360
  };
215
361
  };
@@ -326,6 +472,61 @@ function makeSelectable(BaseTable) {
326
472
  this.onSelect(selectedItems.add(data[focusedIndex]), newFocusedIndex);
327
473
  };
328
474
 
475
+ isContiguousSelection = (selectedItemIndecies, sourceIndex, targetIndex) => {
476
+ if (sourceIndex < targetIndex && selectedItemIndecies.has(sourceIndex - 1)) {
477
+ return true;
478
+ }
479
+ if (targetIndex < sourceIndex && selectedItemIndecies.has(sourceIndex + 1)) {
480
+ return true;
481
+ }
482
+ return false;
483
+ };
484
+
485
+ handleShiftKeyDownForGrid = newFocusedIndex => {
486
+ const { data, loadedData, selectedItems } = this.getProcessedProps();
487
+ const { focusedIndex } = this.state;
488
+
489
+ const dataSize = data.length;
490
+ const targetIndex = newFocusedIndex < 0 ? 0 : Math.min(newFocusedIndex, dataSize - 1);
491
+ const isSourceSelected = selectedItems.has(data[focusedIndex]);
492
+ const isTargetSelected = selectedItems.has(data[targetIndex]);
493
+
494
+ // if data is not loaded, we don't want it to be able to be selected
495
+ if (!loadedData.has(data[targetIndex])) {
496
+ return;
497
+ }
498
+
499
+ const selectedItemIndices = new Set(
500
+ data.reduce((rows, item, i) => {
501
+ if (selectedItems.has(item)) {
502
+ rows.push(i);
503
+ }
504
+ return rows;
505
+ }, []),
506
+ );
507
+
508
+ // reset the anchor on a new selection block
509
+ if (
510
+ !isSourceSelected &&
511
+ !isTargetSelected &&
512
+ // if we are starting a new mass selection adjacent selected block, we want to connect them
513
+ !this.isContiguousSelection(selectedItemIndices, focusedIndex, targetIndex)
514
+ ) {
515
+ this.anchorIndex = focusedIndex;
516
+ }
517
+
518
+ const newSelectedItemIndices = shiftSelect(
519
+ selectedItemIndices,
520
+ focusedIndex,
521
+ targetIndex,
522
+ this.anchorIndex,
523
+ );
524
+
525
+ const newSelectedItems = newSelectedItemIndices.map(i => data[i]);
526
+
527
+ this.onSelect(newSelectedItems, targetIndex);
528
+ };
529
+
329
530
  handleKeyboardSearch = event => {
330
531
  const { searchStrings } = this.props;
331
532
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/table/makeSelectable.js"],"names":["PropTypes","React","Component","Set","ImmutablePropTypes","classNames","FormattedMessage","Hotkeys","HotkeyRecord","messages","shiftSelect","SEARCH_TIMER_DURATION","makeSelectable","BaseTable","originalDisplayName","displayName","name","props","focusedIndex","undefined","selectedItems","newFocusedIndex","onSelect","previousIndex","state","setState","isSet","toJS","enableHotkeys","hotkeyType","hotkeys","key","description","downDescription","handler","event","data","preventDefault","Math","min","length","type","upDescription","max","shiftXDescription","selectToggle","selectAllDescription","shiftDownDescription","handleShiftKeyDown","shiftUpDescription","deselectAllDescription","rowIndex","getProcessedProps","has","delete","add","anchorIndex","selectedRows","reduce","rows","item","i","push","newSelectedRows","newSelectedItems","map","size","index","metaKey","ctrlKey","shiftKey","selectRange","selectOne","blurTimerID","setTimeout","clearFocus","clearTimeout","boundary","searchStrings","target","hasAttribute","nodeName","which","searchTimeout","searchString","findIndex","string","trim","toLowerCase","indexOf","document","addEventListener","handleKeyboardSearch","prevProps","prevState","onFocus","removeEventListener","className","focusedItem","getHotkeyConfigs","handleRowClick","handleRowFocus","handleTableBlur","handleTableFocus","array","isRequired","func","oneOfType","set","bool"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { Set } from 'immutable';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport classNames from 'classnames';\nimport { FormattedMessage } from 'react-intl';\n\nimport { Hotkeys, HotkeyRecord } from '../hotkeys';\nimport messages from './messages';\n\nimport shiftSelect from './shiftSelect';\n\nconst SEARCH_TIMER_DURATION = 1000;\n\nfunction makeSelectable(BaseTable) {\n const originalDisplayName = BaseTable.displayName || BaseTable.name || 'Table';\n\n return class SelectableTable extends Component {\n static displayName = `Selectable(${originalDisplayName})`;\n\n static propTypes = {\n className: PropTypes.string,\n /** Array of unique IDs of the items in the table. Each item should be a string or number, in the order they appear in the table. */\n data: PropTypes.array.isRequired,\n /** Called when focus changes. `(focusedIndex: number) => void` */\n onFocus: PropTypes.func,\n /** Called when selection changes. `(selectedItems: Array<string> | Array<number> | Set<string> | Set<number>) => void` */\n onSelect: PropTypes.func.isRequired,\n /**\n * Array of strings for keyboard search corresponding to the data prop. If not provided, keyboard search won't work.\n * Example: data = ['f_123', 'f_456'], and corresponding searchStrings = ['file.png', 'another file.pdf']\n */\n searchStrings: PropTypes.array,\n /**\n * Array of IDs that are currently selected, in any order.\n * If you pass a native JS array, then your onSelect function will be called with a native JS array;\n * likewise, if you pass an ImmutableJS Set, then your onSelect function will be called\n * with an ImmutableJS Set.\n */\n selectedItems: PropTypes.oneOfType([PropTypes.array, ImmutablePropTypes.set]),\n enableHotkeys: PropTypes.bool,\n /** Translated type for hotkeys. If not provided, then the hotkeys will not appear in the help modal. */\n hotkeyType: PropTypes.string,\n };\n\n static defaultProps = {\n selectedItems: new Set(),\n };\n\n constructor(props) {\n super(props);\n\n this.anchorIndex = 0;\n\n this.searchString = '';\n this.searchTimeout = null;\n\n // we have to store the previously focused index because a focus event\n // will be fired before the click event; thus, in the click handler,\n // the focusedItem will already be the new item\n this.previousIndex = 0;\n\n this.blurTimerID = null;\n }\n\n state = {\n focusedIndex: undefined,\n };\n\n componentDidMount() {\n document.addEventListener('keypress', this.handleKeyboardSearch);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.focusedIndex !== this.state.focusedIndex && this.props.onFocus) {\n this.props.onFocus(this.state.focusedIndex);\n }\n }\n\n componentWillUnmount() {\n document.removeEventListener('keypress', this.handleKeyboardSearch);\n clearTimeout(this.blurTimerID);\n }\n\n onSelect = (selectedItems, newFocusedIndex) => {\n const { onSelect } = this.props;\n\n this.previousIndex = this.state.focusedIndex || 0;\n\n this.setState({\n focusedIndex: newFocusedIndex,\n });\n\n if (onSelect) {\n // If selectedItems were given as an Immutable Set, they should also be returned as one,\n // and vice versa if they were given as a native JS array\n onSelect(Set.isSet(this.props.selectedItems) ? selectedItems : selectedItems.toJS());\n }\n };\n\n getHotkeyConfigs = () => {\n const { enableHotkeys, hotkeyType } = this.props;\n\n if (!enableHotkeys && !this.hotkeys) {\n this.hotkeys = [];\n }\n\n if (!this.hotkeys) {\n this.hotkeys = [\n new HotkeyRecord({\n key: 'down',\n description: <FormattedMessage {...messages.downDescription} />,\n handler: event => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex =\n focusedIndex !== undefined ? Math.min(focusedIndex + 1, data.length - 1) : 0;\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'up',\n description: <FormattedMessage {...messages.upDescription} />,\n handler: event => {\n const { focusedIndex = 0 } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+x',\n description: <FormattedMessage {...messages.shiftXDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n this.selectToggle(focusedIndex);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: ['meta+a', 'ctrl+a'],\n description: <FormattedMessage {...messages.selectAllDescription} />,\n handler: event => {\n const { data } = this.props;\n\n event.preventDefault();\n\n this.onSelect(new Set(data), this.state.focusedIndex);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+down',\n description: <FormattedMessage {...messages.shiftDownDescription} />,\n handler: () => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.min(focusedIndex + 1, data.length - 1);\n this.handleShiftKeyDown(newFocusedIndex, data.length - 1);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+up',\n description: <FormattedMessage {...messages.shiftUpDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.handleShiftKeyDown(newFocusedIndex, 0);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'esc',\n description: <FormattedMessage {...messages.deselectAllDescription} />,\n handler: () => {\n this.onSelect(new Set(), this.state.focusedIndex);\n },\n type: hotkeyType,\n }),\n ];\n }\n\n return this.hotkeys;\n };\n\n getProcessedProps = () => {\n const { selectedItems } = this.props;\n return {\n ...this.props,\n selectedItems: Set.isSet(selectedItems) ? selectedItems : new Set(selectedItems),\n };\n };\n\n hotkeys = null;\n\n selectToggle = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n if (selectedItems.has(data[rowIndex])) {\n this.onSelect(selectedItems.delete(data[rowIndex]), rowIndex);\n } else {\n this.onSelect(selectedItems.add(data[rowIndex]), rowIndex);\n }\n\n this.anchorIndex = rowIndex;\n };\n\n selectRange = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n // Don't change selection if we're shift-clicking the same row\n if (rowIndex === this.previousIndex) {\n return;\n }\n\n // Converts set of items to set of indices to do some slicing magic\n const selectedRows = new Set(\n data.reduce((rows, item, i) => {\n if (selectedItems.has(item)) {\n rows.push(i);\n }\n return rows;\n }, []),\n );\n\n const newSelectedRows = shiftSelect(selectedRows, this.previousIndex, rowIndex, this.anchorIndex);\n\n // Converts set back to set of items\n const newSelectedItems = newSelectedRows.map(i => data[i]);\n\n this.onSelect(newSelectedItems, rowIndex);\n };\n\n selectOne = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n // Don't change selection if we're clicking on a row that we've already selected\n // This allows us to use the native onDoubleClick handler because we're referencing the\n // same DOM node on double-click.\n if (selectedItems.has(data[rowIndex]) && selectedItems.size === 1) {\n return;\n }\n\n this.onSelect(new Set([data[rowIndex]]), rowIndex);\n this.anchorIndex = rowIndex;\n };\n\n clearFocus = () => {\n this.setState({\n focusedIndex: undefined,\n });\n };\n\n handleRowClick = (event, index) => {\n if (event.metaKey || event.ctrlKey) {\n this.selectToggle(index);\n } else if (event.shiftKey) {\n this.selectRange(index);\n } else {\n this.selectOne(index);\n }\n };\n\n handleRowFocus = (event, index) => {\n const { selectedItems } = this.getProcessedProps();\n this.onSelect(selectedItems, index);\n };\n\n handleTableBlur = () => {\n const { focusedIndex } = this.state;\n if (focusedIndex !== undefined) {\n // table may get focus back right away in the same tick, in which case we shouldn't clear focus\n this.blurTimerID = setTimeout(this.clearFocus);\n }\n };\n\n handleTableFocus = () => {\n clearTimeout(this.blurTimerID);\n };\n\n handleShiftKeyDown = (newFocusedIndex, boundary) => {\n const { data, selectedItems } = this.getProcessedProps();\n const { focusedIndex } = this.state;\n\n // if we're at a boundary of the table and the row is selected, no-op\n if (focusedIndex === boundary && selectedItems.has(data[focusedIndex])) {\n return;\n }\n\n // if target is not selected, select it\n if (!selectedItems.has(data[newFocusedIndex])) {\n this.onSelect(selectedItems.add(data[newFocusedIndex]), newFocusedIndex);\n return;\n }\n\n // if both source and target are selected, deselect source\n if (selectedItems.has(data[newFocusedIndex]) && selectedItems.has(data[focusedIndex])) {\n this.onSelect(selectedItems.delete(data[focusedIndex]), newFocusedIndex);\n return;\n }\n\n // if target is selected and source is not, select source\n this.onSelect(selectedItems.add(data[focusedIndex]), newFocusedIndex);\n };\n\n handleKeyboardSearch = event => {\n const { searchStrings } = this.props;\n\n if (!searchStrings) {\n return;\n }\n\n if (\n event.target.hasAttribute('contenteditable') ||\n event.target.nodeName === 'INPUT' ||\n event.target.nodeName === 'TEXTAREA'\n ) {\n return;\n }\n\n // character keys have a value for event.which\n if (event.which === 0) {\n return;\n }\n\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n\n this.searchString += event.key;\n this.searchTimeout = setTimeout(() => {\n this.searchString = '';\n }, SEARCH_TIMER_DURATION);\n\n const index = searchStrings.findIndex(\n string =>\n string\n .trim()\n .toLowerCase()\n .indexOf(this.searchString) === 0,\n );\n\n if (index !== -1) {\n this.setState({ focusedIndex: index });\n }\n };\n\n render() {\n const { className, data } = this.props;\n const { focusedIndex } = this.state;\n const focusedItem = data[focusedIndex];\n\n return (\n <Hotkeys configs={this.getHotkeyConfigs()}>\n <BaseTable\n {...this.props}\n className={classNames(className, 'is-selectable')}\n focusedIndex={focusedIndex}\n focusedItem={focusedItem}\n onRowClick={this.handleRowClick}\n onRowFocus={this.handleRowFocus}\n onTableBlur={this.handleTableBlur}\n onTableFocus={this.handleTableFocus}\n />\n </Hotkeys>\n );\n }\n };\n}\n\nexport default makeSelectable;\n"],"file":"makeSelectable.js"}
1
+ {"version":3,"sources":["../../../src/components/table/makeSelectable.js"],"names":["PropTypes","React","Component","Set","ImmutablePropTypes","classNames","FormattedMessage","Hotkeys","HotkeyRecord","messages","shiftSelect","SEARCH_TIMER_DURATION","makeSelectable","BaseTable","originalDisplayName","displayName","name","props","focusedIndex","undefined","selectedItems","newFocusedIndex","onSelect","previousIndex","state","setState","isSet","toJS","hotkeyType","key","description","shiftXDescription","handler","selectToggle","type","selectAllDescription","event","data","preventDefault","deselectAllDescription","downDescription","Math","min","length","upDescription","max","shiftDownDescription","handleShiftKeyDown","shiftUpDescription","gridColumnCount","handleShiftKeyDownForGrid","enableHotkeys","isGridView","hotkeys","viewSpecificHotKeyConfigs","getGridViewHotKeyConfigs","getListViewHotKeyConfigs","getSharedHotkeyConfigs","loadedData","rowIndex","getProcessedProps","has","delete","add","anchorIndex","selectedRows","reduce","rows","item","i","push","newSelectedRows","newSelectedItems","map","size","index","metaKey","ctrlKey","shiftKey","selectRange","selectOne","blurTimerID","setTimeout","clearFocus","clearTimeout","boundary","selectedItemIndecies","sourceIndex","targetIndex","dataSize","isSourceSelected","isTargetSelected","selectedItemIndices","isContiguousSelection","newSelectedItemIndices","searchStrings","target","hasAttribute","nodeName","which","searchTimeout","searchString","findIndex","string","trim","toLowerCase","indexOf","document","addEventListener","handleKeyboardSearch","prevProps","prevState","onFocus","removeEventListener","className","focusedItem","getHotkeyConfigs","handleRowClick","handleRowFocus","handleTableBlur","handleTableFocus","array","isRequired","number","bool","func","oneOfType","set"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { Set } from 'immutable';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport classNames from 'classnames';\nimport { FormattedMessage } from 'react-intl';\n\nimport { Hotkeys, HotkeyRecord } from '../hotkeys';\nimport messages from './messages';\nimport shiftSelect from './shiftSelect';\n\nconst SEARCH_TIMER_DURATION = 1000;\n\nfunction makeSelectable(BaseTable) {\n const originalDisplayName = BaseTable.displayName || BaseTable.name || 'Table';\n\n return class SelectableTable extends Component {\n static displayName = `Selectable(${originalDisplayName})`;\n\n static propTypes = {\n className: PropTypes.string,\n /** Array of unique IDs of the items in the table. Each item should be a string or number, in the order they appear in the table. */\n data: PropTypes.array.isRequired,\n gridColumnCount: PropTypes.number,\n isGridView: PropTypes.bool,\n /** Called when focus changes. `(focusedIndex: number) => void` */\n onFocus: PropTypes.func,\n /** Called when selection changes. `(selectedItems: Array<string> | Array<number> | Set<string> | Set<number>) => void` */\n onSelect: PropTypes.func.isRequired,\n /**\n * Array of strings for keyboard search corresponding to the data prop. If not provided, keyboard search won't work.\n * Example: data = ['f_123', 'f_456'], and corresponding searchStrings = ['file.png', 'another file.pdf']\n */\n searchStrings: PropTypes.array,\n /**\n * Array of IDs that are currently selected, in any order.\n * If you pass a native JS array, then your onSelect function will be called with a native JS array;\n * likewise, if you pass an ImmutableJS Set, then your onSelect function will be called\n * with an ImmutableJS Set.\n */\n selectedItems: PropTypes.oneOfType([PropTypes.array, ImmutablePropTypes.set]),\n /** Array of unique IDs of the items in the table that are loaded and accessible. If not provided, this will default to all data */\n loadedData: PropTypes.array,\n enableHotkeys: PropTypes.bool,\n /** Translated type for hotkeys. If not provided, then the hotkeys will not appear in the help modal. */\n hotkeyType: PropTypes.string,\n };\n\n static defaultProps = {\n selectedItems: new Set(),\n };\n\n constructor(props) {\n super(props);\n\n this.anchorIndex = 0;\n\n this.searchString = '';\n this.searchTimeout = null;\n\n // we have to store the previously focused index because a focus event\n // will be fired before the click event; thus, in the click handler,\n // the focusedItem will already be the new item\n this.previousIndex = 0;\n\n this.blurTimerID = null;\n }\n\n state = {\n focusedIndex: undefined,\n };\n\n componentDidMount() {\n document.addEventListener('keypress', this.handleKeyboardSearch);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.focusedIndex !== this.state.focusedIndex && this.props.onFocus) {\n this.props.onFocus(this.state.focusedIndex);\n }\n }\n\n componentWillUnmount() {\n document.removeEventListener('keypress', this.handleKeyboardSearch);\n clearTimeout(this.blurTimerID);\n }\n\n onSelect = (selectedItems, newFocusedIndex) => {\n const { onSelect } = this.props;\n\n this.previousIndex = this.state.focusedIndex || 0;\n\n this.setState({\n focusedIndex: newFocusedIndex,\n });\n\n if (onSelect) {\n // If selectedItems were given as an Immutable Set, they should also be returned as one,\n // and vice versa if they were given as a native JS array\n onSelect(Set.isSet(this.props.selectedItems) ? selectedItems : selectedItems.toJS());\n }\n };\n\n getSharedHotkeyConfigs = () => {\n const { hotkeyType } = this.props;\n return [\n new HotkeyRecord({\n key: 'shift+x',\n description: <FormattedMessage {...messages.shiftXDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n this.selectToggle(focusedIndex);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: ['meta+a', 'ctrl+a'],\n description: <FormattedMessage {...messages.selectAllDescription} />,\n handler: event => {\n const { data } = this.props;\n\n event.preventDefault();\n\n this.onSelect(new Set(data), this.state.focusedIndex);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'esc',\n description: <FormattedMessage {...messages.deselectAllDescription} />,\n handler: () => {\n this.onSelect(new Set(), this.state.focusedIndex);\n },\n type: hotkeyType,\n }),\n ];\n };\n\n getListViewHotKeyConfigs = () => {\n const { hotkeyType } = this.props;\n return [\n new HotkeyRecord({\n key: 'down',\n description: <FormattedMessage {...messages.downDescription} />,\n handler: event => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex =\n focusedIndex !== undefined ? Math.min(focusedIndex + 1, data.length - 1) : 0;\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'up',\n description: <FormattedMessage {...messages.upDescription} />,\n handler: event => {\n const { focusedIndex = 0 } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+down',\n description: <FormattedMessage {...messages.shiftDownDescription} />,\n handler: () => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.min(focusedIndex + 1, data.length - 1);\n this.handleShiftKeyDown(newFocusedIndex, data.length - 1);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+up',\n description: <FormattedMessage {...messages.shiftUpDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.handleShiftKeyDown(newFocusedIndex, 0);\n },\n type: hotkeyType,\n }),\n ];\n };\n\n getGridViewHotKeyConfigs = () => {\n const { hotkeyType } = this.props;\n return [\n new HotkeyRecord({\n key: 'right',\n description: <FormattedMessage {...messages.downDescription} />,\n handler: event => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex =\n focusedIndex !== undefined ? Math.min(focusedIndex + 1, data.length - 1) : 0;\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'left',\n description: <FormattedMessage {...messages.upDescription} />,\n handler: event => {\n const { focusedIndex = 0 } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'down',\n description: <FormattedMessage {...messages.downDescription} />,\n handler: event => {\n const { data, gridColumnCount } = this.props;\n const { focusedIndex } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex =\n focusedIndex !== undefined ? Math.min(focusedIndex + gridColumnCount, data.length - 1) : 0;\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'up',\n description: <FormattedMessage {...messages.upDescription} />,\n handler: event => {\n const { gridColumnCount } = this.props;\n const { focusedIndex = 0 } = this.state;\n\n event.preventDefault();\n\n const newFocusedIndex = Math.max(focusedIndex - gridColumnCount, 0);\n this.setState({ focusedIndex: newFocusedIndex });\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+right',\n description: <FormattedMessage {...messages.shiftDownDescription} />,\n handler: () => {\n const { data } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.min(focusedIndex + 1, data.length - 1);\n this.handleShiftKeyDownForGrid(newFocusedIndex, data.length - 1);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+left',\n description: <FormattedMessage {...messages.shiftUpDescription} />,\n handler: () => {\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.max(focusedIndex - 1, 0);\n this.handleShiftKeyDownForGrid(newFocusedIndex, 0);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+down',\n description: <FormattedMessage {...messages.shiftDownDescription} />,\n handler: () => {\n const { data, gridColumnCount } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.min(focusedIndex + gridColumnCount, data.length - 1);\n this.handleShiftKeyDownForGrid(newFocusedIndex, data.length - 1);\n },\n type: hotkeyType,\n }),\n new HotkeyRecord({\n key: 'shift+up',\n description: <FormattedMessage {...messages.shiftUpDescription} />,\n handler: () => {\n const { gridColumnCount } = this.props;\n const { focusedIndex } = this.state;\n\n if (focusedIndex === undefined) {\n return;\n }\n\n const newFocusedIndex = Math.max(focusedIndex - gridColumnCount, 0);\n this.handleShiftKeyDownForGrid(newFocusedIndex, 0);\n },\n type: hotkeyType,\n }),\n ];\n };\n\n getHotkeyConfigs = () => {\n const { enableHotkeys, isGridView, gridColumnCount } = this.props;\n\n if (!enableHotkeys && !this.hotkeys) {\n this.hotkeys = [];\n }\n\n if (!this.hotkeys) {\n const viewSpecificHotKeyConfigs =\n isGridView && gridColumnCount !== undefined\n ? this.getGridViewHotKeyConfigs()\n : this.getListViewHotKeyConfigs();\n\n this.hotkeys = [...this.getSharedHotkeyConfigs(), ...viewSpecificHotKeyConfigs];\n }\n\n return this.hotkeys;\n };\n\n getProcessedProps = () => {\n const { data, loadedData, selectedItems } = this.props;\n return {\n ...this.props,\n loadedData: loadedData ? Set(loadedData) : Set(data),\n selectedItems: Set.isSet(selectedItems) ? selectedItems : new Set(selectedItems),\n };\n };\n\n hotkeys = null;\n\n selectToggle = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n if (selectedItems.has(data[rowIndex])) {\n this.onSelect(selectedItems.delete(data[rowIndex]), rowIndex);\n } else {\n this.onSelect(selectedItems.add(data[rowIndex]), rowIndex);\n }\n\n this.anchorIndex = rowIndex;\n };\n\n selectRange = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n // Don't change selection if we're shift-clicking the same row\n if (rowIndex === this.previousIndex) {\n return;\n }\n\n // Converts set of items to set of indices to do some slicing magic\n const selectedRows = new Set(\n data.reduce((rows, item, i) => {\n if (selectedItems.has(item)) {\n rows.push(i);\n }\n return rows;\n }, []),\n );\n\n const newSelectedRows = shiftSelect(selectedRows, this.previousIndex, rowIndex, this.anchorIndex);\n\n // Converts set back to set of items\n const newSelectedItems = newSelectedRows.map(i => data[i]);\n\n this.onSelect(newSelectedItems, rowIndex);\n };\n\n selectOne = rowIndex => {\n const { data, selectedItems } = this.getProcessedProps();\n\n // Don't change selection if we're clicking on a row that we've already selected\n // This allows us to use the native onDoubleClick handler because we're referencing the\n // same DOM node on double-click.\n if (selectedItems.has(data[rowIndex]) && selectedItems.size === 1) {\n return;\n }\n\n this.onSelect(new Set([data[rowIndex]]), rowIndex);\n this.anchorIndex = rowIndex;\n };\n\n clearFocus = () => {\n this.setState({\n focusedIndex: undefined,\n });\n };\n\n handleRowClick = (event, index) => {\n if (event.metaKey || event.ctrlKey) {\n this.selectToggle(index);\n } else if (event.shiftKey) {\n this.selectRange(index);\n } else {\n this.selectOne(index);\n }\n };\n\n handleRowFocus = (event, index) => {\n const { selectedItems } = this.getProcessedProps();\n this.onSelect(selectedItems, index);\n };\n\n handleTableBlur = () => {\n const { focusedIndex } = this.state;\n if (focusedIndex !== undefined) {\n // table may get focus back right away in the same tick, in which case we shouldn't clear focus\n this.blurTimerID = setTimeout(this.clearFocus);\n }\n };\n\n handleTableFocus = () => {\n clearTimeout(this.blurTimerID);\n };\n\n handleShiftKeyDown = (newFocusedIndex, boundary) => {\n const { data, selectedItems } = this.getProcessedProps();\n const { focusedIndex } = this.state;\n\n // if we're at a boundary of the table and the row is selected, no-op\n if (focusedIndex === boundary && selectedItems.has(data[focusedIndex])) {\n return;\n }\n\n // if target is not selected, select it\n if (!selectedItems.has(data[newFocusedIndex])) {\n this.onSelect(selectedItems.add(data[newFocusedIndex]), newFocusedIndex);\n return;\n }\n\n // if both source and target are selected, deselect source\n if (selectedItems.has(data[newFocusedIndex]) && selectedItems.has(data[focusedIndex])) {\n this.onSelect(selectedItems.delete(data[focusedIndex]), newFocusedIndex);\n return;\n }\n\n // if target is selected and source is not, select source\n this.onSelect(selectedItems.add(data[focusedIndex]), newFocusedIndex);\n };\n\n isContiguousSelection = (selectedItemIndecies, sourceIndex, targetIndex) => {\n if (sourceIndex < targetIndex && selectedItemIndecies.has(sourceIndex - 1)) {\n return true;\n }\n if (targetIndex < sourceIndex && selectedItemIndecies.has(sourceIndex + 1)) {\n return true;\n }\n return false;\n };\n\n handleShiftKeyDownForGrid = newFocusedIndex => {\n const { data, loadedData, selectedItems } = this.getProcessedProps();\n const { focusedIndex } = this.state;\n\n const dataSize = data.length;\n const targetIndex = newFocusedIndex < 0 ? 0 : Math.min(newFocusedIndex, dataSize - 1);\n const isSourceSelected = selectedItems.has(data[focusedIndex]);\n const isTargetSelected = selectedItems.has(data[targetIndex]);\n\n // if data is not loaded, we don't want it to be able to be selected\n if (!loadedData.has(data[targetIndex])) {\n return;\n }\n\n const selectedItemIndices = new Set(\n data.reduce((rows, item, i) => {\n if (selectedItems.has(item)) {\n rows.push(i);\n }\n return rows;\n }, []),\n );\n\n // reset the anchor on a new selection block\n if (\n !isSourceSelected &&\n !isTargetSelected &&\n // if we are starting a new mass selection adjacent selected block, we want to connect them\n !this.isContiguousSelection(selectedItemIndices, focusedIndex, targetIndex)\n ) {\n this.anchorIndex = focusedIndex;\n }\n\n const newSelectedItemIndices = shiftSelect(\n selectedItemIndices,\n focusedIndex,\n targetIndex,\n this.anchorIndex,\n );\n\n const newSelectedItems = newSelectedItemIndices.map(i => data[i]);\n\n this.onSelect(newSelectedItems, targetIndex);\n };\n\n handleKeyboardSearch = event => {\n const { searchStrings } = this.props;\n\n if (!searchStrings) {\n return;\n }\n\n if (\n event.target.hasAttribute('contenteditable') ||\n event.target.nodeName === 'INPUT' ||\n event.target.nodeName === 'TEXTAREA'\n ) {\n return;\n }\n\n // character keys have a value for event.which\n if (event.which === 0) {\n return;\n }\n\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n\n this.searchString += event.key;\n this.searchTimeout = setTimeout(() => {\n this.searchString = '';\n }, SEARCH_TIMER_DURATION);\n\n const index = searchStrings.findIndex(\n string =>\n string\n .trim()\n .toLowerCase()\n .indexOf(this.searchString) === 0,\n );\n\n if (index !== -1) {\n this.setState({ focusedIndex: index });\n }\n };\n\n render() {\n const { className, data } = this.props;\n const { focusedIndex } = this.state;\n const focusedItem = data[focusedIndex];\n\n return (\n <Hotkeys configs={this.getHotkeyConfigs()}>\n <BaseTable\n {...this.props}\n className={classNames(className, 'is-selectable')}\n focusedIndex={focusedIndex}\n focusedItem={focusedItem}\n onRowClick={this.handleRowClick}\n onRowFocus={this.handleRowFocus}\n onTableBlur={this.handleTableBlur}\n onTableFocus={this.handleTableFocus}\n />\n </Hotkeys>\n );\n }\n };\n}\n\nexport default makeSelectable;\n"],"file":"makeSelectable.js"}
@@ -232,6 +232,7 @@ function (_React$Component) {
232
232
  key: "render",
233
233
  value: function render() {
234
234
  var _this$props = this.props,
235
+ ariaHidden = _this$props.ariaHidden,
235
236
  bodyElement = _this$props.bodyElement,
236
237
  children = _this$props.children,
237
238
  className = _this$props.className,
@@ -340,11 +341,11 @@ function (_React$Component) {
340
341
  }, React.createElement("div", {
341
342
  role: theme === TooltipTheme.ERROR ? undefined : 'tooltip',
342
343
  "aria-live": "polite",
343
- "aria-hidden": isLabelMatchingTooltipText,
344
+ "aria-hidden": ariaHidden || isLabelMatchingTooltipText,
344
345
  "data-testid": "bdl-Tooltip"
345
346
  }, tooltipInner)) : React.createElement("div", {
346
347
  "aria-live": "polite",
347
- "aria-hidden": isLabelMatchingTooltipText,
348
+ "aria-hidden": ariaHidden || isLabelMatchingTooltipText,
348
349
  className: classes,
349
350
  "data-testid": "bdl-Tooltip",
350
351
  id: this.tooltipID,