box-ui-elements 15.0.0-beta.7 → 15.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 (508) hide show
  1. package/CONTRIBUTING.md +3 -1
  2. package/dist/explorer.css +1 -1
  3. package/dist/explorer.js +58 -26
  4. package/dist/openwith.css +1 -1
  5. package/dist/openwith.js +10 -17
  6. package/dist/picker.css +1 -1
  7. package/dist/picker.js +12 -19
  8. package/dist/preview.css +1 -1
  9. package/dist/preview.js +56 -24
  10. package/dist/sharing.css +1 -1
  11. package/dist/sharing.js +54 -22
  12. package/dist/sidebar.css +1 -1
  13. package/dist/sidebar.js +56 -24
  14. package/dist/uploader.css +1 -1
  15. package/dist/uploader.js +12 -19
  16. package/es/api/uploads/UploadsReachability.js.flow +2 -2
  17. package/es/api/uploads/UploadsReachability.js.map +1 -1
  18. package/es/common/messages.js +4 -0
  19. package/es/common/messages.js.flow +5 -0
  20. package/es/common/messages.js.map +1 -1
  21. package/es/common/types/core.js.flow +2 -0
  22. package/es/common/types/core.js.map +1 -1
  23. package/es/components/avatar/UnknownUserAvatar.js +6 -9
  24. package/es/components/avatar/UnknownUserAvatar.js.map +1 -1
  25. package/es/components/close-button/CloseButton.js +24 -0
  26. package/es/components/close-button/CloseButton.js.flow +26 -0
  27. package/es/components/close-button/CloseButton.js.map +1 -0
  28. package/es/components/close-button/CloseButton.scss +10 -0
  29. package/es/components/close-button/CloseButton.stories.js +14 -0
  30. package/es/components/close-button/CloseButton.stories.js.map +1 -0
  31. package/es/components/close-button/index.js +2 -0
  32. package/es/components/close-button/index.js.flow +2 -0
  33. package/es/components/close-button/index.js.map +1 -0
  34. package/es/components/date-picker/AccessiblePikaday.js +113 -0
  35. package/es/components/date-picker/AccessiblePikaday.js.map +1 -0
  36. package/es/components/date-picker/DatePicker.js +426 -106
  37. package/es/components/date-picker/DatePicker.js.map +1 -1
  38. package/es/components/date-picker/DatePicker.scss +32 -22
  39. package/es/components/date-picker/DatePicker.stories.js +10 -0
  40. package/es/components/date-picker/DatePicker.stories.js.map +1 -1
  41. package/es/components/date-picker/_pikaday.scss +8 -2
  42. package/es/components/flyout/Flyout.js +13 -3
  43. package/es/components/flyout/Flyout.js.flow +14 -3
  44. package/es/components/flyout/Flyout.js.map +1 -1
  45. package/es/components/flyout/Flyout.scss +40 -0
  46. package/es/components/flyout/FlyoutContext.js +6 -0
  47. package/es/components/flyout/FlyoutContext.js.flow +9 -0
  48. package/es/components/flyout/FlyoutContext.js.map +1 -0
  49. package/es/components/flyout/OverlayHeader.js +33 -0
  50. package/es/components/flyout/OverlayHeader.js.map +1 -0
  51. package/es/components/flyout/OverlayHeader.scss +9 -0
  52. package/es/components/flyout/_variables.scss +1 -0
  53. package/es/components/flyout/index.js +2 -0
  54. package/es/components/flyout/index.js.flow +2 -0
  55. package/es/components/flyout/index.js.map +1 -1
  56. package/es/components/image-tooltip/ImageTooltip.js +1 -2
  57. package/es/components/image-tooltip/ImageTooltip.js.map +1 -1
  58. package/es/components/media-query/constants.js +26 -0
  59. package/es/components/media-query/constants.js.flow +32 -0
  60. package/es/components/media-query/constants.js.map +1 -0
  61. package/es/components/media-query/index.js +3 -0
  62. package/es/components/media-query/index.js.flow +4 -0
  63. package/es/components/media-query/index.js.map +1 -0
  64. package/es/components/media-query/stories/MediaQuery.stories.js +37 -0
  65. package/es/components/media-query/stories/MediaQuery.stories.js.flow +80 -0
  66. package/es/components/media-query/stories/MediaQuery.stories.js.map +1 -0
  67. package/es/components/media-query/types.js +2 -0
  68. package/es/components/media-query/types.js.flow +29 -0
  69. package/es/components/media-query/types.js.map +1 -0
  70. package/es/components/media-query/useMediaQuery.js +91 -0
  71. package/es/components/media-query/useMediaQuery.js.flow +97 -0
  72. package/es/components/media-query/useMediaQuery.js.map +1 -0
  73. package/es/components/media-query/withMediaQuery.js +21 -0
  74. package/es/components/media-query/withMediaQuery.js.flow +23 -0
  75. package/es/components/media-query/withMediaQuery.js.map +1 -0
  76. package/es/components/modal/Modal.scss +27 -0
  77. package/es/components/preview/previewIcons.js +4 -0
  78. package/es/components/preview/previewIcons.js.map +1 -1
  79. package/es/components/search-form/SearchForm.scss +0 -5
  80. package/es/components/selector-dropdown/SelectorDropdown.js +5 -3
  81. package/es/components/selector-dropdown/SelectorDropdown.js.flow +3 -3
  82. package/es/components/selector-dropdown/SelectorDropdown.js.map +1 -1
  83. package/es/components/tab-view/Tabs.scss +0 -4
  84. package/es/components/tooltip/Tooltip.js +21 -4
  85. package/es/components/tooltip/Tooltip.js.map +1 -1
  86. package/es/constants.js +1 -0
  87. package/es/constants.js.flow +1 -0
  88. package/es/constants.js.map +1 -1
  89. package/es/elements/content-open-with/IconFileMap.js +0 -2
  90. package/es/elements/content-open-with/IconFileMap.js.flow +0 -2
  91. package/es/elements/content-open-with/IconFileMap.js.map +1 -1
  92. package/es/elements/content-sidebar/Sidebar.js +2 -1
  93. package/es/elements/content-sidebar/Sidebar.js.flow +1 -1
  94. package/es/elements/content-sidebar/Sidebar.js.map +1 -1
  95. package/es/elements/content-sidebar/activity-feed/common/delete-confirmation/DeleteConfirmation.scss +3 -3
  96. package/es/elements/content-sidebar/activity-feed/task-form/TaskForm.js +14 -4
  97. package/es/elements/content-sidebar/activity-feed/task-form/TaskForm.js.flow +18 -5
  98. package/es/elements/content-sidebar/activity-feed/task-form/TaskForm.js.map +1 -1
  99. package/es/elements/content-sidebar/versions/StaticVersionSidebar.js +78 -0
  100. package/es/elements/content-sidebar/versions/StaticVersionSidebar.js.flow +97 -0
  101. package/es/elements/content-sidebar/versions/StaticVersionSidebar.js.map +1 -0
  102. package/es/elements/content-sidebar/versions/StaticVersionsSidebar.scss +67 -0
  103. package/es/elements/content-sidebar/versions/VersionsSidebar.js +12 -4
  104. package/es/elements/content-sidebar/versions/VersionsSidebar.js.flow +16 -3
  105. package/es/elements/content-sidebar/versions/VersionsSidebar.js.map +1 -1
  106. package/es/elements/content-sidebar/versions/VersionsSidebar.scss +5 -0
  107. package/es/elements/content-sidebar/versions/VersionsSidebarContainer.js +42 -10
  108. package/es/elements/content-sidebar/versions/VersionsSidebarContainer.js.flow +42 -7
  109. package/es/elements/content-sidebar/versions/VersionsSidebarContainer.js.map +1 -1
  110. package/es/elements/content-sidebar/versions/flowTypes.js.flow +1 -0
  111. package/es/elements/content-sidebar/versions/messages.js +20 -0
  112. package/es/elements/content-sidebar/versions/messages.js.flow +28 -0
  113. package/es/elements/content-sidebar/versions/messages.js.map +1 -1
  114. package/es/features/classification/constants.js +2 -1
  115. package/es/features/classification/constants.js.flow +2 -0
  116. package/es/features/classification/constants.js.map +1 -1
  117. package/es/features/classification/flowTypes.js +1 -0
  118. package/es/features/classification/flowTypes.js.flow +7 -1
  119. package/es/features/classification/flowTypes.js.map +1 -1
  120. package/es/features/classification/security-controls/SecurityControls.js +3 -4
  121. package/es/features/classification/security-controls/SecurityControls.js.flow +3 -4
  122. package/es/features/classification/security-controls/SecurityControls.js.map +1 -1
  123. package/es/features/classification/security-controls/SecurityControlsItem.js +1 -1
  124. package/es/features/classification/security-controls/SecurityControlsItem.js.flow +20 -17
  125. package/es/features/classification/security-controls/SecurityControlsItem.js.map +1 -1
  126. package/es/features/classification/security-controls/SecurityControlsItem.scss +4 -0
  127. package/es/features/classification/security-controls/SecurityControlsModal.js +2 -2
  128. package/es/features/classification/security-controls/SecurityControlsModal.js.flow +2 -2
  129. package/es/features/classification/security-controls/SecurityControlsModal.js.map +1 -1
  130. package/es/features/classification/security-controls/messages.js +4 -0
  131. package/es/features/classification/security-controls/messages.js.flow +5 -0
  132. package/es/features/classification/security-controls/messages.js.map +1 -1
  133. package/es/features/classification/security-controls/utils.js +56 -35
  134. package/es/features/classification/security-controls/utils.js.flow +51 -27
  135. package/es/features/classification/security-controls/utils.js.map +1 -1
  136. package/es/features/collapsible-sidebar/CollapsibleSidebar.js +9 -3
  137. package/es/features/collapsible-sidebar/CollapsibleSidebar.js.flow +13 -5
  138. package/es/features/collapsible-sidebar/CollapsibleSidebar.js.map +1 -1
  139. package/es/features/collapsible-sidebar/CollapsibleSidebar.scss +35 -3
  140. package/es/features/content-explorer/content-explorer/ContentExplorer.scss +1 -1
  141. package/es/features/content-explorer/item-list/ItemList.js +1 -0
  142. package/es/features/content-explorer/item-list/ItemList.js.flow +1 -0
  143. package/es/features/content-explorer/item-list/ItemList.js.map +1 -1
  144. package/es/features/content-explorer/item-list/ItemListName.js +13 -2
  145. package/es/features/content-explorer/item-list/ItemListName.js.flow +3 -2
  146. package/es/features/content-explorer/item-list/ItemListName.js.map +1 -1
  147. package/es/features/header-flyout/HeaderFlyout.js +8 -10
  148. package/es/features/header-flyout/HeaderFlyout.js.flow +4 -8
  149. package/es/features/header-flyout/HeaderFlyout.js.map +1 -1
  150. package/es/features/header-flyout/styles/HeaderFlyout.scss +54 -15
  151. package/es/features/header-flyout/styles/_variables.scss +4 -0
  152. package/es/features/message-center/components/message-center-modal/MessageCenterModal.js +1 -0
  153. package/es/features/message-center/components/message-center-modal/MessageCenterModal.js.flow +1 -0
  154. package/es/features/message-center/components/message-center-modal/MessageCenterModal.js.map +1 -1
  155. package/es/features/presence/PresenceCollaborator.js +90 -0
  156. package/es/features/presence/PresenceCollaborator.js.flow +81 -0
  157. package/es/features/presence/PresenceCollaborator.js.map +1 -0
  158. package/es/features/presence/PresenceCollaborator.scss +28 -0
  159. package/es/features/presence/PresenceCollaboratorsList.js +9 -57
  160. package/es/features/presence/PresenceCollaboratorsList.js.flow +7 -58
  161. package/es/features/presence/PresenceCollaboratorsList.js.map +1 -1
  162. package/es/features/presence/PresenceCollaboratorsList.scss +8 -35
  163. package/es/features/quick-search/QuickSearch.js +4 -2
  164. package/es/features/quick-search/QuickSearch.js.flow +13 -1
  165. package/es/features/quick-search/QuickSearch.js.map +1 -1
  166. package/es/features/unified-share-modal/SharedLinkSection.js +9 -20
  167. package/es/features/unified-share-modal/SharedLinkSection.js.flow +6 -27
  168. package/es/features/unified-share-modal/SharedLinkSection.js.map +1 -1
  169. package/es/features/unified-share-modal/UnifiedShareForm.js +95 -53
  170. package/es/features/unified-share-modal/UnifiedShareForm.js.flow +70 -14
  171. package/es/features/unified-share-modal/UnifiedShareForm.js.map +1 -1
  172. package/es/features/unified-share-modal/UnifiedShareModal.scss +3 -0
  173. package/es/features/unified-share-modal/flowTypes.js.flow +6 -0
  174. package/es/features/unified-share-modal/flowTypes.js.map +1 -1
  175. package/es/features/unified-share-modal/messages.js +8 -0
  176. package/es/features/unified-share-modal/messages.js.flow +10 -0
  177. package/es/features/unified-share-modal/messages.js.map +1 -1
  178. package/es/features/unified-share-modal/utils/mergeContacts.js +13 -10
  179. package/es/features/unified-share-modal/utils/mergeContacts.js.flow +4 -2
  180. package/es/features/unified-share-modal/utils/mergeContacts.js.map +1 -1
  181. package/es/icon/content/FileXbd32.js +39 -0
  182. package/es/icon/content/FileXbd32.js.flow +38 -0
  183. package/es/icon/content/FileXbd32.js.map +1 -0
  184. package/es/icon/content/FileXbd32.stories.js +13 -0
  185. package/es/icon/content/FileXbd32.stories.js.map +1 -0
  186. package/es/icon/content/FileXdw32.js +39 -0
  187. package/es/icon/content/FileXdw32.js.flow +38 -0
  188. package/es/icon/content/FileXdw32.js.map +1 -0
  189. package/es/icon/content/FileXdw32.stories.js +13 -0
  190. package/es/icon/content/FileXdw32.stories.js.map +1 -0
  191. package/es/icon/content/RetentionPolicyModifiable32.js +36 -0
  192. package/es/icon/content/RetentionPolicyModifiable32.js.flow +31 -0
  193. package/es/icon/content/RetentionPolicyModifiable32.js.map +1 -0
  194. package/es/icon/content/RetentionPolicyModifiable32.stories.js +13 -0
  195. package/es/icon/content/RetentionPolicyModifiable32.stories.js.map +1 -0
  196. package/es/icon/content/RetentionPolicyNonModifiable32.js +36 -0
  197. package/es/icon/content/RetentionPolicyNonModifiable32.js.flow +31 -0
  198. package/es/icon/content/RetentionPolicyNonModifiable32.js.map +1 -0
  199. package/es/icon/content/RetentionPolicyNonModifiable32.stories.js +13 -0
  200. package/es/icon/content/RetentionPolicyNonModifiable32.stories.js.map +1 -0
  201. package/es/icons/avatars/UnknownUserAvatar.js +10 -34
  202. package/es/icons/avatars/UnknownUserAvatar.js.map +1 -1
  203. package/es/icons/file-icon/FileIcon.js +8 -2
  204. package/es/icons/file-icon/FileIcon.js.flow +2 -2
  205. package/es/icons/file-icon/FileIcon.js.map +1 -1
  206. package/es/icons/general/IconSearch.js +1 -1
  207. package/es/icons/general/IconSearch.js.flow +1 -1
  208. package/es/icons/general/IconSearch.js.map +1 -1
  209. package/es/icons/general/IconSearchJuicy.js +30 -0
  210. package/es/icons/general/IconSearchJuicy.js.flow +26 -0
  211. package/es/icons/general/IconSearchJuicy.js.map +1 -0
  212. package/es/icons/google-docs/IconGoogle.js +89 -0
  213. package/es/icons/google-docs/IconGoogle.js.flow +57 -0
  214. package/es/icons/google-docs/IconGoogle.js.map +1 -0
  215. package/es/icons/item-icon/ItemIcon.js +4 -0
  216. package/es/icons/item-icon/ItemIcon.js.map +1 -1
  217. package/es/icons/microsoft-office/IconOffice.js +80 -0
  218. package/es/icons/microsoft-office/IconOffice.js.flow +45 -0
  219. package/es/icons/microsoft-office/IconOffice.js.map +1 -0
  220. package/es/illustration/EmailVerification140.js +111 -0
  221. package/es/illustration/EmailVerification140.js.flow +102 -0
  222. package/es/illustration/EmailVerification140.js.map +1 -0
  223. package/es/illustration/EmailVerification140.stories.js +13 -0
  224. package/es/illustration/EmailVerification140.stories.js.map +1 -0
  225. package/es/src/components/close-button/CloseButton.d.ts +9 -0
  226. package/es/src/components/close-button/CloseButton.stories.d.ts +9 -0
  227. package/es/src/components/close-button/__tests__/CloseButton.stories.test.d.ts +0 -0
  228. package/es/src/components/close-button/__tests__/CloseButton.test.d.ts +1 -0
  229. package/es/src/components/close-button/index.d.ts +1 -0
  230. package/es/src/components/date-picker/AccessiblePikaday.d.ts +16 -0
  231. package/es/src/components/date-picker/DatePicker.d.ts +33 -6
  232. package/es/src/components/date-picker/DatePicker.stories.d.ts +2 -1
  233. package/es/src/components/flyout/OverlayHeader.d.ts +10 -0
  234. package/es/src/components/tooltip/Tooltip.d.ts +4 -3
  235. package/es/src/icon/content/FileXbd32.d.ts +13 -0
  236. package/es/src/icon/content/FileXbd32.stories.d.ts +9 -0
  237. package/es/src/icon/content/FileXdw32.d.ts +13 -0
  238. package/es/src/icon/content/FileXdw32.stories.d.ts +9 -0
  239. package/es/src/icon/content/RetentionPolicyModifiable32.d.ts +13 -0
  240. package/es/src/icon/content/RetentionPolicyModifiable32.stories.d.ts +9 -0
  241. package/es/src/icon/content/RetentionPolicyNonModifiable32.d.ts +13 -0
  242. package/es/src/icon/content/RetentionPolicyNonModifiable32.stories.d.ts +9 -0
  243. package/es/src/icons/avatars/UnknownUserAvatar.d.ts +0 -1
  244. package/es/src/icons/general/IconSearchJuicy.d.ts +3 -0
  245. package/es/src/icons/general/__tests__/IconSearchJuicy.test.d.ts +1 -0
  246. package/es/src/icons/google-docs/IconGoogle.d.ts +12 -0
  247. package/es/src/icons/google-docs/__tests__/IconGoogle.test.d.ts +1 -0
  248. package/es/src/icons/item-icon/ItemIcon.d.ts +2 -0
  249. package/es/src/icons/microsoft-office/IconOffice.d.ts +12 -0
  250. package/es/src/icons/microsoft-office/__tests__/IconOffice.test.d.ts +1 -0
  251. package/es/src/illustration/EmailVerification140.d.ts +13 -0
  252. package/es/src/illustration/EmailVerification140.stories.d.ts +9 -0
  253. package/es/src/styles/variables.d.ts +9 -0
  254. package/es/styles/_variables.scss +1 -0
  255. package/es/styles/common/_forms.scss +6 -0
  256. package/es/styles/constants/_layout.scss +3 -0
  257. package/es/styles/constants/_media-queries.scss +15 -0
  258. package/es/styles/variables.js +18 -0
  259. package/es/styles/variables.js.flow +10 -1
  260. package/es/styles/variables.js.map +1 -1
  261. package/es/utils/Browser.js +12 -0
  262. package/es/utils/Browser.js.flow +10 -0
  263. package/es/utils/Browser.js.map +1 -1
  264. package/es/utils/validators.js +26 -4
  265. package/es/utils/validators.js.flow +25 -3
  266. package/es/utils/validators.js.map +1 -1
  267. package/i18n/bn-IN.js +12 -0
  268. package/i18n/bn-IN.properties +24 -0
  269. package/i18n/da-DK.js +12 -0
  270. package/i18n/da-DK.properties +24 -0
  271. package/i18n/de-DE.js +12 -0
  272. package/i18n/de-DE.properties +24 -0
  273. package/i18n/en-AU.js +12 -0
  274. package/i18n/en-AU.properties +24 -0
  275. package/i18n/en-CA.js +12 -0
  276. package/i18n/en-CA.properties +24 -0
  277. package/i18n/en-GB.js +12 -0
  278. package/i18n/en-GB.properties +24 -0
  279. package/i18n/en-US.js +12 -0
  280. package/i18n/en-US.properties +24 -0
  281. package/i18n/en-x-pseudo.js +12 -0
  282. package/i18n/es-419.js +12 -0
  283. package/i18n/es-419.properties +24 -0
  284. package/i18n/es-ES.js +12 -0
  285. package/i18n/es-ES.properties +24 -0
  286. package/i18n/fi-FI.js +12 -0
  287. package/i18n/fi-FI.properties +24 -0
  288. package/i18n/fr-CA.js +12 -0
  289. package/i18n/fr-CA.properties +24 -0
  290. package/i18n/fr-FR.js +12 -0
  291. package/i18n/fr-FR.properties +24 -0
  292. package/i18n/hi-IN.js +12 -0
  293. package/i18n/hi-IN.properties +24 -0
  294. package/i18n/it-IT.js +12 -0
  295. package/i18n/it-IT.properties +24 -0
  296. package/i18n/ja-JP.js +25 -13
  297. package/i18n/ja-JP.properties +37 -13
  298. package/i18n/ko-KR.js +12 -0
  299. package/i18n/ko-KR.properties +24 -0
  300. package/i18n/nb-NO.js +12 -0
  301. package/i18n/nb-NO.properties +24 -0
  302. package/i18n/nl-NL.js +12 -0
  303. package/i18n/nl-NL.properties +24 -0
  304. package/i18n/pl-PL.js +12 -0
  305. package/i18n/pl-PL.properties +24 -0
  306. package/i18n/pt-BR.js +12 -0
  307. package/i18n/pt-BR.properties +24 -0
  308. package/i18n/ru-RU.js +12 -0
  309. package/i18n/ru-RU.properties +24 -0
  310. package/i18n/sv-SE.js +12 -0
  311. package/i18n/sv-SE.properties +24 -0
  312. package/i18n/tr-TR.js +12 -0
  313. package/i18n/tr-TR.properties +24 -0
  314. package/i18n/zh-CN.js +12 -0
  315. package/i18n/zh-CN.properties +24 -0
  316. package/i18n/zh-TW.js +12 -0
  317. package/i18n/zh-TW.properties +24 -0
  318. package/package.json +8 -5
  319. package/src/__mocks__/pikaday.js +1 -0
  320. package/src/api/__tests__/MockOpenWithData.json +2 -25
  321. package/src/api/uploads/UploadsReachability.js +2 -2
  322. package/src/common/messages.js +5 -0
  323. package/src/common/types/core.js +2 -0
  324. package/src/components/avatar/UnknownUserAvatar.tsx +5 -4
  325. package/src/components/close-button/CloseButton.js.flow +26 -0
  326. package/src/components/close-button/CloseButton.scss +10 -0
  327. package/src/components/close-button/CloseButton.stories.md +1 -0
  328. package/src/components/close-button/CloseButton.stories.tsx +14 -0
  329. package/src/components/close-button/CloseButton.tsx +30 -0
  330. package/src/components/close-button/__tests__/CloseButton.stories.test.tsx +6 -0
  331. package/src/components/close-button/__tests__/CloseButton.test.tsx +40 -0
  332. package/src/components/close-button/__tests__/__image_snapshots__/close-button-stories-test-tsx-components-close-button-close-button-looks-visually-correct-when-using-story-components-buttons-closebutton-regular-1-snap.png +0 -0
  333. package/src/components/close-button/index.js.flow +2 -0
  334. package/src/components/close-button/index.ts +1 -0
  335. package/src/components/date-picker/AccessiblePikaday.ts +79 -0
  336. package/src/components/date-picker/DatePicker.scss +32 -22
  337. package/src/components/date-picker/DatePicker.stories.tsx +6 -0
  338. package/src/components/date-picker/DatePicker.tsx +350 -64
  339. package/src/components/date-picker/__tests__/DatePicker.test.tsx +44 -2
  340. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-allows-editing-in-story-components-datepicker-manually-editable-1-snap.png +0 -0
  341. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-allows-keyboard-selection-in-components-datepicker-always-visible-with-custom-input-field-1-snap.png +0 -0
  342. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-closes-calendar-and-clears-date-for-components-datepicker-basic-1-snap.png +0 -0
  343. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-looks-visually-correct-when-using-story-components-datepicker-always-visible-with-custom-input-field-1-snap.png +0 -0
  344. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-looks-visually-correct-when-using-story-components-datepicker-basic-1-snap.png +0 -0
  345. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-looks-visually-correct-when-using-story-components-datepicker-custom-error-tooltip-position-1-snap.png +0 -0
  346. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-looks-visually-correct-when-using-story-components-datepicker-disabled-with-error-message-1-snap.png +0 -0
  347. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-looks-visually-correct-when-using-story-components-datepicker-manually-editable-1-snap.png +0 -0
  348. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-looks-visually-correct-when-using-story-components-datepicker-with-description-1-snap.png +0 -0
  349. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-looks-visually-correct-when-using-story-components-datepicker-with-limited-date-range-1-snap.png +0 -0
  350. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-looks-visually-correct-when-using-story-components-datepicker-with-range-1-snap.png +0 -0
  351. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-reflects-changes-in-components-datepicker-always-visible-with-custom-input-field-1-snap.png +0 -0
  352. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-shows-calendar-and-date-for-components-datepicker-basic-1-snap.png +0 -0
  353. package/src/components/date-picker/__tests__/__image_snapshots__/date-picker-stories-test-tsx-components-date-picker-date-picker-shows-limited-range-in-components-datepicker-with-limited-date-range-1-snap.png +0 -0
  354. package/src/components/date-picker/_pikaday.scss +8 -2
  355. package/src/components/flyout/Flyout.js +14 -3
  356. package/src/components/flyout/Flyout.scss +40 -0
  357. package/src/components/flyout/FlyoutContext.js +9 -0
  358. package/src/components/flyout/OverlayHeader.scss +9 -0
  359. package/src/components/flyout/OverlayHeader.tsx +38 -0
  360. package/src/components/flyout/__tests__/Flyout.test.js +15 -0
  361. package/src/components/flyout/__tests__/OverlayHeader.test.js +56 -0
  362. package/src/components/flyout/_variables.scss +1 -0
  363. package/src/components/flyout/index.js +2 -0
  364. package/src/components/image-tooltip/ImageTooltip.tsx +1 -2
  365. package/src/components/media-query/__tests__/useMediaQuery.test.js +48 -0
  366. package/src/components/media-query/__tests__/withMediaQuery.test.js +29 -0
  367. package/src/components/media-query/constants.js +32 -0
  368. package/src/components/media-query/index.js +4 -0
  369. package/src/components/media-query/stories/MediaQuery.stories.js +80 -0
  370. package/src/components/media-query/stories/MediaQuery.stories.md +29 -0
  371. package/src/components/media-query/types.js +29 -0
  372. package/src/components/media-query/useMediaQuery.js +97 -0
  373. package/src/components/media-query/withMediaQuery.js +23 -0
  374. package/src/components/modal/Modal.scss +27 -0
  375. package/src/components/modal/__tests__/Modal.stories.test.js +10 -0
  376. package/src/components/modal/__tests__/__image_snapshots__/modal-stories-test-js-components-modal-modal-looks-visually-correct-for-small-screens-when-button-is-clicked-in-story-components-modal-basic-1-snap.png +0 -0
  377. package/src/components/modal/__tests__/__image_snapshots__/modal-stories-test-js-components-modal-modal-looks-visually-correct-for-small-screens-when-button-is-clicked-in-story-components-modal-with-custom-backdrop-click-handler-1-snap.png +0 -0
  378. package/src/components/preview/previewIcons.ts +4 -0
  379. package/src/components/search-form/SearchForm.scss +0 -5
  380. package/src/components/selector-dropdown/SelectorDropdown.js +3 -3
  381. package/src/components/selector-dropdown/__tests__/SelectorDropdown.test.js +5 -1
  382. package/src/components/sidebar-toggle-button/__tests__/__snapshots__/SidebarToggleButton.test.js.snap +0 -8
  383. package/src/components/tab-view/Tabs.scss +0 -4
  384. package/src/components/tooltip/Tooltip.tsx +20 -5
  385. package/src/components/tooltip/__tests__/Tooltip.test.tsx +17 -4
  386. package/src/components/tooltip/__tests__/__snapshots__/Tooltip.test.tsx.snap +0 -2
  387. package/src/constants.js +1 -0
  388. package/src/elements/content-open-with/IconFileMap.js +0 -2
  389. package/src/elements/content-open-with/__tests__/ContentOpenWith.test.js +13 -13
  390. package/src/elements/content-open-with/__tests__/OpenWithButton.test.js +1 -1
  391. package/src/elements/content-open-with/__tests__/OpenWithDropdownMenu.test.js +1 -5
  392. package/src/elements/content-open-with/__tests__/OpenWithDropdownMenuItem.test.js +2 -2
  393. package/src/elements/content-open-with/__tests__/__snapshots__/ContentOpenWith.test.js.snap +5 -5
  394. package/src/elements/content-open-with/__tests__/__snapshots__/OpenWithButton.test.js.snap +1 -1
  395. package/src/elements/content-open-with/__tests__/__snapshots__/OpenWithDropdownMenu.test.js.snap +1 -11
  396. package/src/elements/content-open-with/__tests__/__snapshots__/OpenWithDropdownMenuItem.test.js.snap +4 -3
  397. package/src/elements/content-sidebar/Sidebar.js +1 -1
  398. package/src/elements/content-sidebar/__tests__/AddTaskButton.test.js +15 -0
  399. package/src/elements/content-sidebar/activity-feed/common/delete-confirmation/DeleteConfirmation.scss +3 -3
  400. package/src/elements/content-sidebar/activity-feed/task-form/TaskForm.js +18 -5
  401. package/src/elements/content-sidebar/versions/StaticVersionSidebar.js +97 -0
  402. package/src/elements/content-sidebar/versions/StaticVersionsSidebar.scss +67 -0
  403. package/src/elements/content-sidebar/versions/VersionsSidebar.js +16 -3
  404. package/src/elements/content-sidebar/versions/VersionsSidebar.scss +5 -0
  405. package/src/elements/content-sidebar/versions/VersionsSidebarContainer.js +42 -7
  406. package/src/elements/content-sidebar/versions/__tests__/VersionsSidebar.test.js +18 -1
  407. package/src/elements/content-sidebar/versions/__tests__/VersionsSidebarContainer.test.js +51 -2
  408. package/src/elements/content-sidebar/versions/__tests__/__snapshots__/VersionsSidebarContainer.test.js.snap +75 -0
  409. package/src/elements/content-sidebar/versions/flowTypes.js +1 -0
  410. package/src/elements/content-sidebar/versions/messages.js +28 -0
  411. package/src/features/classification/constants.js +2 -0
  412. package/src/features/classification/flowTypes.js +7 -1
  413. package/src/features/classification/security-controls/SecurityControls.js +3 -4
  414. package/src/features/classification/security-controls/SecurityControlsItem.js +20 -17
  415. package/src/features/classification/security-controls/SecurityControlsItem.scss +4 -0
  416. package/src/features/classification/security-controls/SecurityControlsModal.js +2 -2
  417. package/src/features/classification/security-controls/__tests__/SecurityControlsItem.test.js +10 -0
  418. package/src/features/classification/security-controls/__tests__/__snapshots__/SecurityControls.test.js.snap +6 -6
  419. package/src/features/classification/security-controls/__tests__/__snapshots__/SecurityControlsItem.test.js.snap +35 -0
  420. package/src/features/classification/security-controls/__tests__/__snapshots__/SecurityControlsModal.test.js.snap +2 -2
  421. package/src/features/classification/security-controls/__tests__/__snapshots__/utils.test.js.snap +20 -0
  422. package/src/features/classification/security-controls/__tests__/utils.test.js +38 -18
  423. package/src/features/classification/security-controls/messages.js +5 -0
  424. package/src/features/classification/security-controls/utils.js +51 -27
  425. package/src/features/collapsible-sidebar/CollapsibleSidebar.js +13 -5
  426. package/src/features/collapsible-sidebar/CollapsibleSidebar.scss +35 -3
  427. package/src/features/collapsible-sidebar/__tests__/CollapsibleSidebar.test.js +35 -0
  428. package/src/features/collapsible-sidebar/__tests__/__snapshots__/CollapsibleSidebar.test.js.snap +1 -0
  429. package/src/features/content-explorer/content-explorer/ContentExplorer.scss +1 -1
  430. package/src/features/content-explorer/item-list/ItemList.js +1 -0
  431. package/src/features/content-explorer/item-list/ItemListName.js +3 -2
  432. package/src/features/content-explorer/item-list/__tests__/ItemListName.test.js +16 -2
  433. package/src/features/header-flyout/HeaderFlyout.js +4 -8
  434. package/src/features/header-flyout/__tests__/__snapshots__/HeaderFlyout.test.js.snap +14 -11
  435. package/src/features/header-flyout/styles/HeaderFlyout.scss +54 -15
  436. package/src/features/header-flyout/styles/_variables.scss +4 -0
  437. package/src/features/message-center/components/message-center-modal/MessageCenterModal.js +1 -0
  438. package/src/features/metadata-instance-editor/__tests__/__snapshots__/TemplateDropdown.test.js.snap +7 -0
  439. package/src/features/pagination/__tests__/__snapshots__/MarkerBasedPagination.test.js.snap +0 -8
  440. package/src/features/pagination/__tests__/__snapshots__/OffsetBasedPagination.test.js.snap +0 -16
  441. package/src/features/presence/PresenceCollaborator.js +81 -0
  442. package/src/features/presence/PresenceCollaborator.scss +28 -0
  443. package/src/features/presence/PresenceCollaboratorsList.js +7 -58
  444. package/src/features/presence/PresenceCollaboratorsList.scss +8 -35
  445. package/src/features/presence/__tests__/PresenceCollaborator.test.js +36 -0
  446. package/src/features/presence/__tests__/PresenceCollaboratorsList.test.js +13 -57
  447. package/src/features/presence/__tests__/__snapshots__/Presence.test.js.snap +5 -0
  448. package/src/features/presence/__tests__/__snapshots__/PresenceLink.test.js.snap +3 -0
  449. package/src/features/query-bar/__tests__/__snapshots__/ColumnButton.test.js.snap +3 -0
  450. package/src/features/quick-search/QuickSearch.js +13 -1
  451. package/src/features/quick-search/__tests__/QuickSearch.test.js +17 -0
  452. package/src/features/unified-share-modal/SharedLinkSection.js +6 -27
  453. package/src/features/unified-share-modal/UnifiedShareForm.js +70 -14
  454. package/src/features/unified-share-modal/UnifiedShareModal.scss +3 -0
  455. package/src/features/unified-share-modal/__tests__/EmailForm.test.js +9 -0
  456. package/src/features/unified-share-modal/__tests__/SharedLinkSection.test.js +14 -4
  457. package/src/features/unified-share-modal/__tests__/UnifiedShareForm.test.js +53 -4
  458. package/src/features/unified-share-modal/__tests__/__snapshots__/SharedLinkSection.test.js.snap +9 -0
  459. package/src/features/unified-share-modal/__tests__/__snapshots__/UnifiedShareForm.test.js.snap +0 -159
  460. package/src/features/unified-share-modal/flowTypes.js +6 -0
  461. package/src/features/unified-share-modal/messages.js +10 -0
  462. package/src/features/unified-share-modal/utils/__tests__/mergeContacts.test.js +23 -0
  463. package/src/features/unified-share-modal/utils/mergeContacts.js +4 -2
  464. package/src/icon/content/FileXbd32.js.flow +38 -0
  465. package/src/icon/content/FileXbd32.stories.tsx +13 -0
  466. package/src/icon/content/FileXbd32.tsx +37 -0
  467. package/src/icon/content/FileXdw32.js.flow +38 -0
  468. package/src/icon/content/FileXdw32.stories.tsx +13 -0
  469. package/src/icon/content/FileXdw32.tsx +37 -0
  470. package/src/icon/content/RetentionPolicyModifiable32.js.flow +31 -0
  471. package/src/icon/content/RetentionPolicyModifiable32.stories.tsx +14 -0
  472. package/src/icon/content/RetentionPolicyModifiable32.tsx +29 -0
  473. package/src/icon/content/RetentionPolicyNonModifiable32.js.flow +31 -0
  474. package/src/icon/content/RetentionPolicyNonModifiable32.stories.tsx +14 -0
  475. package/src/icon/content/RetentionPolicyNonModifiable32.tsx +29 -0
  476. package/src/icons/adobe-sign/README.md +1 -1
  477. package/src/icons/avatars/UnknownUserAvatar.tsx +7 -15
  478. package/src/icons/file-icon/FileIcon.js.flow +2 -2
  479. package/src/icons/file-icon/FileIcon.tsx +8 -2
  480. package/src/icons/file-icon/__tests__/FileIcon.test.tsx +28 -69
  481. package/src/icons/file-icon/__tests__/__snapshots__/FileIcon.test.tsx.snap +48 -34
  482. package/src/icons/general/IconSearch.js.flow +1 -1
  483. package/src/icons/general/IconSearch.tsx +1 -1
  484. package/src/icons/general/IconSearchJuicy.js.flow +26 -0
  485. package/src/icons/general/IconSearchJuicy.tsx +25 -0
  486. package/src/icons/general/README.md +5 -0
  487. package/src/icons/general/__tests__/IconSearchJuicy.test.tsx +38 -0
  488. package/src/icons/google-docs/IconGoogle.js.flow +57 -0
  489. package/src/icons/google-docs/IconGoogle.tsx +50 -0
  490. package/src/icons/google-docs/__tests__/IconGoogle.test.tsx +44 -0
  491. package/src/icons/item-icon/ItemIcon.tsx +4 -0
  492. package/src/icons/item-icon/__tests__/ItemIcon.test.tsx +47 -115
  493. package/src/icons/item-icon/__tests__/__snapshots__/ItemIcon.test.tsx.snap +229 -229
  494. package/src/icons/microsoft-office/IconOffice.js.flow +45 -0
  495. package/src/icons/microsoft-office/IconOffice.tsx +38 -0
  496. package/src/icons/microsoft-office/__tests__/IconOffice.test.tsx +44 -0
  497. package/src/illustration/EmailVerification140.js.flow +102 -0
  498. package/src/illustration/EmailVerification140.stories.tsx +13 -0
  499. package/src/illustration/EmailVerification140.tsx +100 -0
  500. package/src/styles/_variables.scss +1 -0
  501. package/src/styles/common/_forms.scss +6 -0
  502. package/src/styles/constants/_layout.scss +3 -0
  503. package/src/styles/constants/_media-queries.scss +15 -0
  504. package/src/styles/variables.js +10 -1
  505. package/src/styles/variables.json +10 -1
  506. package/src/styles/variables.ts +9 -0
  507. package/src/utils/Browser.js +10 -0
  508. package/src/utils/validators.js +25 -3
@@ -24,6 +24,8 @@ type Props = {
24
24
  noItemsMessage?: React.Node,
25
25
  /** Function called with the index of the selected option and the event (selected by keyboard or click) */
26
26
  onSelect?: Function,
27
+ /** Optional title text that will be rendered above the list */
28
+ title?: React.Node,
27
29
  };
28
30
 
29
31
  type State = {
@@ -48,7 +50,16 @@ class QuickSearch extends React.Component<Props, State> {
48
50
  };
49
51
 
50
52
  render() {
51
- const { children, className, dividerIndex, errorMessage, inputProps, noItemsMessage, onSelect } = this.props;
53
+ const {
54
+ children,
55
+ className,
56
+ dividerIndex,
57
+ errorMessage,
58
+ inputProps,
59
+ noItemsMessage,
60
+ onSelect,
61
+ title,
62
+ } = this.props;
52
63
  const { showMessage } = this.state;
53
64
 
54
65
  return (
@@ -57,6 +68,7 @@ class QuickSearch extends React.Component<Props, State> {
57
68
  dividerIndex={dividerIndex}
58
69
  onSelect={onSelect}
59
70
  selector={<QuickSearchSelector {...inputProps} />}
71
+ title={title}
60
72
  >
61
73
  {children}
62
74
  </SelectorDropdown>
@@ -105,6 +105,23 @@ describe('features/quick-search/QuickSearch', () => {
105
105
 
106
106
  expect(selectorDropdown.prop('dividerIndex')).toEqual(1);
107
107
  });
108
+
109
+ test('should render title when specified', () => {
110
+ const children = (
111
+ <>
112
+ <li key="1" />
113
+ <li key="2" />
114
+ </>
115
+ );
116
+ const title = <div>title</div>;
117
+ const wrapper = shallow(
118
+ <QuickSearch title={title} inputProps={inputProps}>
119
+ {children}
120
+ </QuickSearch>,
121
+ );
122
+ const selectorDropdown = wrapper.find('SelectorDropdown');
123
+ expect(selectorDropdown.prop('title')).toEqual(title);
124
+ });
108
125
  });
109
126
 
110
127
  describe('onFocus', () => {
@@ -1,6 +1,7 @@
1
1
  // @flow
2
2
 
3
3
  import * as React from 'react';
4
+ import noop from 'lodash/noop';
4
5
  import { FormattedMessage } from 'react-intl';
5
6
 
6
7
  import PlainButton from '../../components/plain-button';
@@ -74,7 +75,6 @@ type Props = {
74
75
  type State = {
75
76
  isAutoCreatingSharedLink: boolean,
76
77
  isCopySuccessful: ?boolean,
77
- isPermissionElevatedToEdit: boolean,
78
78
  isSharedLinkEditTooltipShown: boolean,
79
79
  };
80
80
 
@@ -93,7 +93,6 @@ class SharedLinkSection extends React.Component<Props, State> {
93
93
  isAutoCreatingSharedLink: false,
94
94
  isCopySuccessful: null,
95
95
  isSharedLinkEditTooltipShown: false,
96
- isPermissionElevatedToEdit: false,
97
96
  };
98
97
  }
99
98
 
@@ -134,12 +133,7 @@ class SharedLinkSection extends React.Component<Props, State> {
134
133
  onCopyInit = () => {},
135
134
  } = this.props;
136
135
 
137
- const {
138
- isAutoCreatingSharedLink,
139
- isCopySuccessful,
140
- isSharedLinkEditTooltipShown,
141
- isPermissionElevatedToEdit,
142
- } = this.state;
136
+ const { isAutoCreatingSharedLink, isCopySuccessful, isSharedLinkEditTooltipShown } = this.state;
143
137
 
144
138
  if (
145
139
  autoCreateSharedLink &&
@@ -159,21 +153,6 @@ class SharedLinkSection extends React.Component<Props, State> {
159
153
  }
160
154
  }
161
155
 
162
- if (
163
- prevProps.sharedLink.permissionLevel !== '' &&
164
- prevProps.sharedLink.permissionLevel !== CAN_EDIT &&
165
- sharedLink.permissionLevel === CAN_EDIT
166
- ) {
167
- this.setState({ isPermissionElevatedToEdit: true });
168
- }
169
-
170
- if (
171
- isPermissionElevatedToEdit &&
172
- (sharedLink.permissionLevel !== CAN_EDIT || sharedLink.accessLevel !== ANYONE_IN_COMPANY)
173
- ) {
174
- this.setState({ isPermissionElevatedToEdit: false });
175
- }
176
-
177
156
  if (
178
157
  Browser.canWriteToClipboard() &&
179
158
  triggerCopyOnLoad &&
@@ -267,7 +246,7 @@ class SharedLinkSection extends React.Component<Props, State> {
267
246
  tooltips,
268
247
  } = this.props;
269
248
 
270
- const { isCopySuccessful, isPermissionElevatedToEdit, isSharedLinkEditTooltipShown } = this.state;
249
+ const { isCopySuccessful, isSharedLinkEditTooltipShown } = this.state;
271
250
 
272
251
  const {
273
252
  accessLevel,
@@ -285,7 +264,7 @@ class SharedLinkSection extends React.Component<Props, State> {
285
264
  onChangeSharedLinkAccessLevel,
286
265
  onChangeSharedLinkPermissionLevel,
287
266
  onSharedLinkAccessMenuOpen,
288
- onSharedLinkCopy,
267
+ onSharedLinkCopy = noop,
289
268
  sendSharedLinkButtonProps,
290
269
  sharedLinkAccessMenuButtonProps,
291
270
  sharedLinkPermissionsMenuButtonProps,
@@ -321,7 +300,7 @@ class SharedLinkSection extends React.Component<Props, State> {
321
300
  className="shared-link-field-container"
322
301
  disabled={submitting}
323
302
  label=""
324
- onCopySuccess={onSharedLinkCopy}
303
+ onCopySuccess={() => onSharedLinkCopy(permissionLevel)}
325
304
  triggerCopyOnLoad={shouldTriggerCopyOnLoad}
326
305
  type="url"
327
306
  value={url}
@@ -417,7 +396,7 @@ class SharedLinkSection extends React.Component<Props, State> {
417
396
  )}
418
397
  </div>
419
398
  )}
420
- {accessLevel === ANYONE_IN_COMPANY && isPermissionElevatedToEdit && (
399
+ {accessLevel === ANYONE_IN_COMPANY && permissionLevel === CAN_EDIT && (
421
400
  <div className="security-indicator-note">
422
401
  <span className="security-indicator-icon-globe">
423
402
  <IconGlobe height={12} width={12} />
@@ -5,10 +5,13 @@ import isEmpty from 'lodash/isEmpty';
5
5
  import isEqual from 'lodash/isEqual';
6
6
  import { FormattedMessage, injectIntl } from 'react-intl';
7
7
 
8
+ import FormattedCompMessage from '../../components/i18n/FormattedCompMessage';
8
9
  import LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';
9
10
  import { Link } from '../../components/link';
10
11
  import Button from '../../components/button';
11
12
  import { UpgradeBadge } from '../../components/badge';
13
+ import InlineNotice from '../../components/inline-notice';
14
+ import PlainButton from '../../components/plain-button';
12
15
  import { ITEM_TYPE_WEBLINK } from '../../common/constants';
13
16
  import Tooltip from '../../components/tooltip';
14
17
  import { CollaboratorAvatars, CollaboratorList } from '../collaborator-avatars';
@@ -220,8 +223,9 @@ class UnifiedShareForm extends React.Component<USFProps, State> {
220
223
  };
221
224
 
222
225
  handleSendSharedLink = (data: Object) => {
223
- const { sendSharedLink, trackingProps } = this.props;
226
+ const { sendSharedLink, sharedLink, trackingProps } = this.props;
224
227
  const { sharedLinkEmailTracking } = trackingProps;
228
+ const { permissionLevel } = sharedLink;
225
229
  const { onSendClick } = sharedLinkEmailTracking;
226
230
 
227
231
  const { emails, groupIDs } = data;
@@ -231,6 +235,7 @@ class UnifiedShareForm extends React.Component<USFProps, State> {
231
235
  ...data,
232
236
  numsOfRecipients: emails.length,
233
237
  numOfRecipientGroups: groupIDs.length,
238
+ permissionLevel,
234
239
  };
235
240
  onSendClick(params);
236
241
  }
@@ -420,6 +425,7 @@ class UnifiedShareForm extends React.Component<USFProps, State> {
420
425
  shouldRenderFTUXTooltip,
421
426
  showEnterEmailsCallout = false,
422
427
  showCalloutForUser = false,
428
+ showUpgradeInlineNotice = false,
423
429
  showUpgradeOptions,
424
430
  submitting,
425
431
  suggestedCollaborators,
@@ -507,7 +513,7 @@ class UnifiedShareForm extends React.Component<USFProps, State> {
507
513
  {...inviteCollabsEmailTracking}
508
514
  >
509
515
  {this.renderInviteePermissionsDropdown()}
510
- {isInviteSectionExpanded && showUpgradeOptions && this.renderUpgradeLinkDescription()}
516
+ {showUpgradeOptions && !showUpgradeInlineNotice && this.renderUpgradeLinkDescription()}
511
517
  </EmailForm>
512
518
  </div>
513
519
  </Tooltip>
@@ -538,28 +544,75 @@ class UnifiedShareForm extends React.Component<USFProps, State> {
538
544
  return avatarsContent;
539
545
  }
540
546
 
547
+ renderCollaboratorMessage(resinTarget: string) {
548
+ const { openUpgradePlanModal = () => {} } = this.props;
549
+ return (
550
+ <>
551
+ <FormattedCompMessage
552
+ id="boxui.unifiedShare.upgradeCollaboratorAccessDescription"
553
+ description="Description for cta to upgrade to get collaborator access controls"
554
+ >
555
+ Set the level of{' '}
556
+ <Link
557
+ className="upgrade-link"
558
+ href="https://support.box.com/hc/en-us/articles/360044196413-Understanding-Collaborator-Permission-Levels"
559
+ target="_blank"
560
+ >
561
+ collaborator access
562
+ </Link>{' '}
563
+ and increase security through one of our paid plans.{' '}
564
+ </FormattedCompMessage>
565
+ <PlainButton
566
+ className="upgrade-link"
567
+ data-resin-target={resinTarget}
568
+ onClick={openUpgradePlanModal}
569
+ type="button"
570
+ >
571
+ <FormattedMessage {...messages.upgradeLink} />
572
+ </PlainButton>
573
+ </>
574
+ );
575
+ }
576
+
541
577
  renderUpgradeLinkDescription() {
542
- const { trackingProps = {} } = this.props;
578
+ const { openUpgradePlanModal = () => {}, showNewUpgradeText = false, trackingProps = {} } = this.props;
543
579
  const { inviteCollabsEmailTracking = {} } = trackingProps;
544
580
  const { upgradeLinkProps = {} } = inviteCollabsEmailTracking;
545
581
 
546
582
  return (
547
583
  <div className="upgrade-description">
548
- <UpgradeBadge type="warning" />
549
- <FormattedMessage
550
- values={{
551
- upgradeGetMoreAccessControlsLink: (
552
- <Link className="upgrade-link" href="/upgrade" {...upgradeLinkProps}>
553
- <FormattedMessage {...messages.upgradeGetMoreAccessControlsLink} />
554
- </Link>
555
- ),
556
- }}
557
- {...messages.upgradeGetMoreAccessControlsDescription}
558
- />
584
+ <UpgradeBadge />
585
+ {showNewUpgradeText ? (
586
+ this.renderCollaboratorMessage('external_collab_newcopy_upgrade_cta')
587
+ ) : (
588
+ <FormattedMessage
589
+ values={{
590
+ upgradeGetMoreAccessControlsLink: (
591
+ <PlainButton
592
+ className="upgrade-link"
593
+ onClick={openUpgradePlanModal}
594
+ type="button"
595
+ {...upgradeLinkProps}
596
+ >
597
+ <FormattedMessage {...messages.upgradeGetMoreAccessControlsLink} />
598
+ </PlainButton>
599
+ ),
600
+ }}
601
+ {...messages.upgradeGetMoreAccessControlsDescription}
602
+ />
603
+ )}
559
604
  </div>
560
605
  );
561
606
  }
562
607
 
608
+ renderUpgradeInlineNotice() {
609
+ return (
610
+ <InlineNotice title={<FormattedMessage {...messages.upgradeInlineNoticeTitle} />} type="info">
611
+ {this.renderCollaboratorMessage('external_collab_top_message_upgrade_cta')}
612
+ </InlineNotice>
613
+ );
614
+ }
615
+
563
616
  renderInviteePermissionsDropdown() {
564
617
  const { inviteePermissions, item, submitting, canInvite, trackingProps } = this.props;
565
618
  const { type } = item;
@@ -631,6 +684,8 @@ class UnifiedShareForm extends React.Component<USFProps, State> {
631
684
  sharedLinkEditTooltipTargetingApi,
632
685
  showEnterEmailsCallout = false,
633
686
  showSharedLinkSettingsCallout = false,
687
+ showUpgradeInlineNotice = false,
688
+ showUpgradeOptions,
634
689
  submitting,
635
690
  tooltips = {},
636
691
  trackingProps,
@@ -649,6 +704,7 @@ class UnifiedShareForm extends React.Component<USFProps, State> {
649
704
  <div className={displayInModal ? '' : 'be bdl-UnifiedShareForm'}>
650
705
  <LoadingIndicatorWrapper isLoading={isFetching} hideContent>
651
706
  {showShareRestrictionWarning && allShareRestrictionWarning}
707
+ {showUpgradeOptions && showUpgradeInlineNotice && this.renderUpgradeInlineNotice()}
652
708
 
653
709
  {!isEmailLinkSectionExpanded && !showCollaboratorList && this.renderInviteSection()}
654
710
 
@@ -266,6 +266,9 @@
266
266
 
267
267
  .upgrade-badge {
268
268
  margin-right: 5px;
269
+ padding: $bdl-grid-unit ($bdl-grid-unit * 2);
270
+ background-color: $bdl-grimace-20;
271
+ border-radius: 10px;
269
272
  }
270
273
 
271
274
  .upgrade-link {
@@ -403,6 +403,15 @@ describe('features/unified-share-modal/EmailForm', () => {
403
403
  email: 'test@@example.com',
404
404
  expectedValue: false,
405
405
  },
406
+ // manually supplemented TLD:
407
+ {
408
+ email: 'test@@example.cpa',
409
+ expectedValue: true,
410
+ },
411
+ {
412
+ email: 'test@@example.badTLD',
413
+ expectedValue: true,
414
+ },
406
415
  ].forEach(({ email, expectedValue }) => {
407
416
  test('should show an error if it detects an invalid email address', () => {
408
417
  const wrapper = getWrapper();
@@ -357,8 +357,6 @@ describe('features/unified-share-modal/SharedLinkSection', () => {
357
357
 
358
358
  const wrapper = getWrapper({ sharedLink });
359
359
 
360
- expect(wrapper.state().isPermissionElevatedToEdit).toBe(false);
361
-
362
360
  wrapper.setProps({
363
361
  sharedLink: {
364
362
  accessLevel: ANYONE_IN_COMPANY,
@@ -368,8 +366,6 @@ describe('features/unified-share-modal/SharedLinkSection', () => {
368
366
  },
369
367
  });
370
368
 
371
- expect(wrapper.state().isPermissionElevatedToEdit).toBe(true);
372
-
373
369
  expect(
374
370
  wrapper.find(`[data-testid="shared-link-elevated-editable-company-available-message"]`).length,
375
371
  ).toEqual(1);
@@ -497,6 +493,20 @@ describe('features/unified-share-modal/SharedLinkSection', () => {
497
493
  expect(onCopyErrorMock).toBeCalledTimes(0);
498
494
  });
499
495
 
496
+ test('should call onSharedLinkCopy with current permission level when copy button is clicked', () => {
497
+ const onSharedLinkCopy = jest.fn();
498
+ const sharedLink = { url: 'http://example.com/', isNewSharedLink: false, permissionLevel: CAN_EDIT };
499
+
500
+ const wrapper = getWrapper({
501
+ sharedLink,
502
+ trackingProps: { onSharedLinkCopy },
503
+ });
504
+
505
+ wrapper.find('TextInputWithCopyButton').prop('onCopySuccess')();
506
+
507
+ expect(onSharedLinkCopy).toBeCalledWith(CAN_EDIT);
508
+ });
509
+
500
510
  test('should only initiate copy when we specifically request a copy to be triggered', () => {
501
511
  const sharedLink = { url: '', isNewSharedLink: false };
502
512
  const addSharedLink = jest.fn();
@@ -1,7 +1,8 @@
1
1
  import * as React from 'react';
2
2
 
3
3
  import { ITEM_TYPE_WEBLINK, ITEM_TYPE_FOLDER } from '../../../common/constants';
4
- import { JUSTIFICATION_CHECKPOINT_EXTERNAL_COLLAB } from '../constants';
4
+
5
+ import { CAN_EDIT, JUSTIFICATION_CHECKPOINT_EXTERNAL_COLLAB } from '../constants';
5
6
 
6
7
  import { UnifiedShareFormBase as UnifiedShareForm } from '../UnifiedShareForm';
7
8
 
@@ -211,10 +212,30 @@ describe('features/unified-share-modal/UnifiedShareForm', () => {
211
212
  isFetching: false,
212
213
  showUpgradeOptions: true,
213
214
  });
214
- wrapper.setState({
215
- isInviteSectionExpanded: true,
215
+ expect(wrapper.exists('UpgradeBadge')).toBe(true);
216
+ });
217
+
218
+ test('should render correct copy of upgrade CTA when showUpgradeOptions and showNewUpgradeText is enabled', () => {
219
+ const wrapper = getWrapper({
220
+ canInvite: true,
221
+ isFetching: false,
222
+ showNewUpgradeText: true,
223
+ showUpgradeOptions: true,
216
224
  });
217
- expect(wrapper).toMatchSnapshot();
225
+ expect(wrapper.exists('UpgradeBadge')).toBe(true);
226
+ const msg = wrapper.find('FormattedCompMessage');
227
+ expect(msg.prop('id')).toEqual('boxui.unifiedShare.upgradeCollaboratorAccessDescription');
228
+ });
229
+
230
+ test('should render correct upgrade inline notice when showUpgradeInlineNotice and showUpgradeOptions is enabled', () => {
231
+ const wrapper = getWrapper({
232
+ canInvite: true,
233
+ isFetching: false,
234
+ showUpgradeInlineNotice: true,
235
+ showUpgradeOptions: true,
236
+ });
237
+ expect(wrapper.exists('UpgradeBadge')).toBe(false);
238
+ expect(wrapper.exists('InlineNotice')).toBe(true);
218
239
  });
219
240
 
220
241
  test('should render a default component with correct Focus element and props when focusSharedLinkOnLoad is enabled', () => {
@@ -416,6 +437,34 @@ describe('features/unified-share-modal/UnifiedShareForm', () => {
416
437
  });
417
438
  });
418
439
 
440
+ describe('handleSendSharedLink()', () => {
441
+ test('should call onSendClick and sendSharedLink with the correct params', async () => {
442
+ const data = {
443
+ emails: ['dvader@example.com', 'fbar@example.com'],
444
+ groupIDs: ['eng@example.com', 'product@example.com'],
445
+ };
446
+ const onSendClick = jest.fn();
447
+ const sendSharedLink = jest.fn();
448
+ const sharedLink = { permissionLevel: CAN_EDIT };
449
+ const trackingProps = {
450
+ ...defaultTrackingProps,
451
+ sharedLinkEmailTracking: { onSendClick },
452
+ };
453
+ const expectedParams = {
454
+ ...data,
455
+ numsOfRecipients: 2,
456
+ numOfRecipientGroups: 2,
457
+ permissionLevel: CAN_EDIT,
458
+ };
459
+ const wrapper = getWrapper({ sendSharedLink, sharedLink, trackingProps });
460
+
461
+ await wrapper.instance().handleSendSharedLink(data);
462
+
463
+ expect(onSendClick).toBeCalledWith(expectedParams);
464
+ expect(sendSharedLink).toBeCalledWith(data);
465
+ });
466
+ });
467
+
419
468
  describe('handleInviteePermissionChange()', () => {
420
469
  test('should set the permission in the state', () => {
421
470
  const onInviteePermissionChange = jest.fn();
@@ -96,6 +96,7 @@ exports[`features/unified-share-modal/SharedLinkSection should account for share
96
96
  className="shared-link-field-container"
97
97
  hideOptionalLabel={true}
98
98
  label=""
99
+ onCopySuccess={[Function]}
99
100
  readOnly={true}
100
101
  successStateDuration={3000}
101
102
  triggerCopyOnLoad={false}
@@ -255,6 +256,7 @@ exports[`features/unified-share-modal/SharedLinkSection should render a default
255
256
  className="shared-link-field-container"
256
257
  hideOptionalLabel={true}
257
258
  label=""
259
+ onCopySuccess={[Function]}
258
260
  readOnly={true}
259
261
  successStateDuration={3000}
260
262
  triggerCopyOnLoad={false}
@@ -448,6 +450,7 @@ exports[`features/unified-share-modal/SharedLinkSection should render default co
448
450
  className="shared-link-field-container"
449
451
  hideOptionalLabel={true}
450
452
  label=""
453
+ onCopySuccess={[Function]}
451
454
  readOnly={true}
452
455
  successStateDuration={3000}
453
456
  triggerCopyOnLoad={false}
@@ -712,6 +715,7 @@ exports[`features/unified-share-modal/SharedLinkSection should render proper dro
712
715
  className="shared-link-field-container"
713
716
  hideOptionalLabel={true}
714
717
  label=""
718
+ onCopySuccess={[Function]}
715
719
  readOnly={true}
716
720
  successStateDuration={3000}
717
721
  triggerCopyOnLoad={false}
@@ -855,6 +859,7 @@ exports[`features/unified-share-modal/SharedLinkSection should render proper lis
855
859
  className="shared-link-field-container"
856
860
  hideOptionalLabel={true}
857
861
  label=""
862
+ onCopySuccess={[Function]}
858
863
  readOnly={true}
859
864
  successStateDuration={3000}
860
865
  triggerCopyOnLoad={false}
@@ -1000,6 +1005,7 @@ exports[`features/unified-share-modal/SharedLinkSection should render proper lis
1000
1005
  className="shared-link-field-container"
1001
1006
  hideOptionalLabel={true}
1002
1007
  label=""
1008
+ onCopySuccess={[Function]}
1003
1009
  readOnly={true}
1004
1010
  successStateDuration={3000}
1005
1011
  triggerCopyOnLoad={false}
@@ -1144,6 +1150,7 @@ exports[`features/unified-share-modal/SharedLinkSection should render proper lis
1144
1150
  className="shared-link-field-container"
1145
1151
  hideOptionalLabel={true}
1146
1152
  label=""
1153
+ onCopySuccess={[Function]}
1147
1154
  readOnly={true}
1148
1155
  successStateDuration={3000}
1149
1156
  triggerCopyOnLoad={false}
@@ -1288,6 +1295,7 @@ exports[`features/unified-share-modal/SharedLinkSection should render proper lis
1288
1295
  className="shared-link-field-container"
1289
1296
  hideOptionalLabel={true}
1290
1297
  label=""
1298
+ onCopySuccess={[Function]}
1291
1299
  readOnly={true}
1292
1300
  successStateDuration={3000}
1293
1301
  triggerCopyOnLoad={false}
@@ -1458,6 +1466,7 @@ exports[`features/unified-share-modal/SharedLinkSection should render without Sh
1458
1466
  className="shared-link-field-container"
1459
1467
  hideOptionalLabel={true}
1460
1468
  label=""
1469
+ onCopySuccess={[Function]}
1461
1470
  readOnly={true}
1462
1471
  successStateDuration={3000}
1463
1472
  triggerCopyOnLoad={false}