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
@@ -69,6 +69,19 @@ describe('elements/content-sidebar/versions/VersionsSidebarContainer', () => {
69
69
  });
70
70
  });
71
71
 
72
+ describe('componentDidMount', () => {
73
+ test('should call onLoad after a successful fetchData() call', async () => {
74
+ const onLoad = jest.fn();
75
+ const fetchData = jest.fn(() => Promise.resolve());
76
+ const instance = getWrapper({ onLoad }).instance();
77
+
78
+ instance.fetchData = fetchData;
79
+
80
+ await instance.componentDidMount();
81
+ expect(onLoad).toHaveBeenCalled();
82
+ });
83
+ });
84
+
72
85
  describe('handleActionDelete', () => {
73
86
  test('should call api endpoint helpers', () => {
74
87
  const handleDelete = jest.fn();
@@ -191,16 +204,52 @@ describe('elements/content-sidebar/versions/VersionsSidebarContainer', () => {
191
204
  test('should set state to default values with error message', () => {
192
205
  const wrapper = getWrapper();
193
206
 
194
- wrapper.instance().handleFetchError();
207
+ wrapper.instance().handleFetchError({ status: 500 });
195
208
 
196
- expect(wrapper.state()).toEqual({
209
+ expect(wrapper.state()).toMatchObject({
197
210
  error: messages.versionFetchError,
211
+ errorTitle: messages.versionServerError,
212
+ });
213
+ });
214
+ test('should set state to default values with error upsell message if onUpgradeClick is set', () => {
215
+ const wrapper = getWrapper({
216
+ onUpgradeClick: () => {},
217
+ versionUpsellExperience: 'STATIC_VERSION_HISTORY',
218
+ });
219
+
220
+ wrapper.instance().handleFetchError({ status: 403 });
221
+
222
+ expect(wrapper.state()).toEqual({
223
+ error: messages.versionNotAvailable,
224
+ errorTitle: messages.versionAccessError,
198
225
  isLoading: false,
199
226
  isWatermarked: false,
200
227
  versionCount: 0,
201
228
  versionLimit: Infinity,
202
229
  versions: [],
203
230
  });
231
+
232
+ expect(wrapper).toMatchSnapshot();
233
+ });
234
+
235
+ test('should create StaticVersionSidebar if versionUpsellExperience is STATIC_VERSION_HISTORY', () => {
236
+ const wrapper = getWrapper({
237
+ onUpgradeClick: () => {},
238
+ versionUpsellExperience: 'STATIC_VERSION_HISTORY',
239
+ });
240
+ wrapper.instance().handleFetchError({ status: 403 });
241
+
242
+ expect(wrapper).toMatchSnapshot();
243
+ });
244
+
245
+ test('should create StaticVersionSidebar if versionUpsellExperience is STATIC_VERSION_HISTORY_WITH_PICTURE', () => {
246
+ const wrapper = getWrapper({
247
+ onUpgradeClick: () => {},
248
+ versionUpsellExperience: 'STATIC_VERSION_HISTORY_WITH_PICTURE',
249
+ });
250
+ wrapper.instance().handleFetchError({ status: 403 });
251
+
252
+ expect(wrapper).toMatchSnapshot();
204
253
  });
205
254
  });
206
255
 
@@ -1,5 +1,80 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
+ exports[`elements/content-sidebar/versions/VersionsSidebarContainer handleFetchError should create StaticVersionSidebar if versionUpsellExperience is STATIC_VERSION_HISTORY 1`] = `
4
+ <StaticVersionsSidebar
5
+ error={
6
+ Object {
7
+ "defaultMessage": "Sorry, version history is not available with your current account plan. To access versioning, select from one of our paid plans.",
8
+ "id": "be.sidebarVersions.notAvailable",
9
+ }
10
+ }
11
+ errorTitle={
12
+ Object {
13
+ "defaultMessage": "You don't have access to versioning",
14
+ "id": "be.sidebarVersions.accessError",
15
+ }
16
+ }
17
+ isLoading={false}
18
+ isWatermarked={false}
19
+ onUpgradeClick={[Function]}
20
+ parentName=""
21
+ showUpsellWithPicture={false}
22
+ versionCount={0}
23
+ versionLimit={Infinity}
24
+ versions={Array []}
25
+ />
26
+ `;
27
+
28
+ exports[`elements/content-sidebar/versions/VersionsSidebarContainer handleFetchError should create StaticVersionSidebar if versionUpsellExperience is STATIC_VERSION_HISTORY_WITH_PICTURE 1`] = `
29
+ <StaticVersionsSidebar
30
+ error={
31
+ Object {
32
+ "defaultMessage": "Sorry, version history is not available with your current account plan. To access versioning, select from one of our paid plans.",
33
+ "id": "be.sidebarVersions.notAvailable",
34
+ }
35
+ }
36
+ errorTitle={
37
+ Object {
38
+ "defaultMessage": "You don't have access to versioning",
39
+ "id": "be.sidebarVersions.accessError",
40
+ }
41
+ }
42
+ isLoading={false}
43
+ isWatermarked={false}
44
+ onUpgradeClick={[Function]}
45
+ parentName=""
46
+ showUpsellWithPicture={true}
47
+ versionCount={0}
48
+ versionLimit={Infinity}
49
+ versions={Array []}
50
+ />
51
+ `;
52
+
53
+ exports[`elements/content-sidebar/versions/VersionsSidebarContainer handleFetchError should set state to default values with error upsell message if onUpgradeClick is set 1`] = `
54
+ <StaticVersionsSidebar
55
+ error={
56
+ Object {
57
+ "defaultMessage": "Sorry, version history is not available with your current account plan. To access versioning, select from one of our paid plans.",
58
+ "id": "be.sidebarVersions.notAvailable",
59
+ }
60
+ }
61
+ errorTitle={
62
+ Object {
63
+ "defaultMessage": "You don't have access to versioning",
64
+ "id": "be.sidebarVersions.accessError",
65
+ }
66
+ }
67
+ isLoading={false}
68
+ isWatermarked={false}
69
+ onUpgradeClick={[Function]}
70
+ parentName=""
71
+ showUpsellWithPicture={false}
72
+ versionCount={0}
73
+ versionLimit={Infinity}
74
+ versions={Array []}
75
+ />
76
+ `;
77
+
3
78
  exports[`elements/content-sidebar/versions/VersionsSidebarContainer render should match its snapshot 1`] = `
4
79
  <VersionsSidebar
5
80
  fileId="12345"
@@ -4,3 +4,4 @@ import type { BoxItemVersion } from '../../../common/types/core';
4
4
 
5
5
  export type VersionActionCallback = (versionId: string) => void;
6
6
  export type VersionChangeCallback = (version: ?BoxItemVersion, additionalVersionInfo: ?AdditionalVersionInfo) => void;
7
+ export type SidebarLoadCallback = (data: Object) => void;
@@ -109,6 +109,13 @@ const messages = defineMessages({
109
109
  defaultMessage: 'File versions could not be retrieved.',
110
110
  description: 'Error message for the versions fetch call.',
111
111
  },
112
+ versionNotAvailable: {
113
+ id: 'be.sidebarVersions.notAvailable',
114
+ defaultMessage:
115
+ 'Sorry, version history is not available with your current account plan. To access versioning, select from one of our paid plans.',
116
+ description:
117
+ 'Error message with upsell for the versions fetch call for users who dont have the version feature.',
118
+ },
112
119
  versionLimitExceeded: {
113
120
  id: 'be.sidebarVersions.versionLimitExceeded',
114
121
  defaultMessage:
@@ -140,6 +147,16 @@ const messages = defineMessages({
140
147
  defaultMessage: 'Server Error',
141
148
  description: 'Heading for inline error messages displayed due to a remote server issue.',
142
149
  },
150
+ versionAccessError: {
151
+ id: 'be.sidebarVersions.accessError',
152
+ defaultMessage: "You don't have access to versioning",
153
+ description: 'Heading for inline error messages with upsell.',
154
+ },
155
+ versionUpgradeLink: {
156
+ id: 'be.sidebarVersions.upgradeLink',
157
+ defaultMessage: 'Upgrade Now',
158
+ description: 'Text on the upgrade button shown when user does not have access to Version History',
159
+ },
143
160
  versionUploadedBy: {
144
161
  id: 'be.sidebarVersions.uploadedBy',
145
162
  defaultMessage: 'Uploaded by {name}',
@@ -170,6 +187,17 @@ const messages = defineMessages({
170
187
  defaultMessage: 'Retention policy expires on {time}.',
171
188
  description: 'Message describing when the version retention policy will expire.',
172
189
  },
190
+ versionUpsell: {
191
+ defaultMessage:
192
+ 'Sorry, version history is not available with your current account plan. To access versioning, select from one of our paid plans.',
193
+ description: 'Upgrade message shown when user does not have access to Version History',
194
+ id: 'be.sidebarVersions.versionUpsell',
195
+ },
196
+ upgradeButton: {
197
+ defaultMessage: 'Upgrade',
198
+ description: 'Text on the upgrade button shown when user does not have access to Version History',
199
+ id: 'be.sidebarVersions.upgradeButton',
200
+ },
173
201
  });
174
202
 
175
203
  export default messages;
@@ -17,12 +17,14 @@ const ACCESS_POLICY_RESTRICTION: {
17
17
  EXTERNAL_COLLAB: 'externalCollab',
18
18
  FTP: 'ftp',
19
19
  SHARED_LINK: 'sharedLink',
20
+ WATERMARK: 'watermark',
20
21
  } = {
21
22
  SHARED_LINK: 'sharedLink',
22
23
  DOWNLOAD: 'download',
23
24
  EXTERNAL_COLLAB: 'externalCollab',
24
25
  APP: 'app',
25
26
  FTP: 'ftp',
27
+ WATERMARK: 'watermark',
26
28
  };
27
29
 
28
30
  const DOWNLOAD_CONTROL: {
@@ -1,4 +1,5 @@
1
1
  // @flow
2
+ import * as React from 'react';
2
3
  import type { MessageDescriptor } from 'react-intl';
3
4
 
4
5
  import {
@@ -44,17 +45,22 @@ type SharedLinkRestrictions = {
44
45
  accessLevel: SharedLinkAccessLevel,
45
46
  };
46
47
 
48
+ type watermarkApplied = {
49
+ enabled?: boolean,
50
+ };
51
+
47
52
  type Controls = {
48
53
  app?: ApplicationRestriction,
49
54
  download?: DownloadRestrictions,
50
55
  externalCollab?: ExternalCollabRestriction,
51
56
  sharedLink?: SharedLinkRestrictions,
57
+ watermark?: watermarkApplied,
52
58
  };
53
59
 
54
60
  type ControlsFormat = $Values<typeof SECURITY_CONTROLS_FORMAT>;
55
61
 
56
62
  type MessageItem = {
57
- message: MessageDescriptor,
63
+ message: MessageDescriptor | React.Node,
58
64
  tooltipMessage?: MessageDescriptor,
59
65
  };
60
66
 
@@ -67,8 +67,7 @@ class SecurityControls extends React.Component<Props, State> {
67
67
  if (controlsFormat === FULL) {
68
68
  items = getFullSecurityControlsMessages(controls, maxAppCount);
69
69
  } else {
70
- const shortMessage = getShortSecurityControlsMessage(controls);
71
- items = shortMessage ? [shortMessage] : [];
70
+ items = getShortSecurityControlsMessage(controls);
72
71
 
73
72
  if (items.length && controlsFormat === SHORT_WITH_BTN) {
74
73
  modalItems = getFullSecurityControlsMessages(controls, maxAppCount);
@@ -85,8 +84,8 @@ class SecurityControls extends React.Component<Props, State> {
85
84
 
86
85
  let itemsList = (
87
86
  <ul className="bdl-SecurityControls">
88
- {items.map(({ message, tooltipMessage }) => (
89
- <SecurityControlsItem key={message.id} message={message} tooltipMessage={tooltipMessage} />
87
+ {items.map(({ message, tooltipMessage }, index) => (
88
+ <SecurityControlsItem key={index} message={message} tooltipMessage={tooltipMessage} />
90
89
  ))}
91
90
  </ul>
92
91
  );
@@ -13,22 +13,25 @@ type Props = MessageItem;
13
13
 
14
14
  const ICON_SIZE = 13;
15
15
 
16
- const SecurityControlsItem = ({ message, tooltipMessage }: Props) => (
17
- <li className="bdl-SecurityControlsItem">
18
- <FormattedMessage {...message} />
19
- {tooltipMessage && (
20
- <Tooltip
21
- className="bdl-SecurityControlsItem-tooltip"
22
- text={<FormattedMessage {...tooltipMessage} />}
23
- position="middle-right"
24
- isTabbable={false}
25
- >
26
- <span className="bdl-SecurityControlsItem-tooltipIcon">
27
- <IconInfo color={bdlBoxBlue} width={ICON_SIZE} height={ICON_SIZE} />
28
- </span>
29
- </Tooltip>
30
- )}
31
- </li>
32
- );
16
+ const SecurityControlsItem = ({ message, tooltipMessage }: Props) => {
17
+ return (
18
+ <li className="bdl-SecurityControlsItem">
19
+ {/* $FlowFixMe */}
20
+ {React.isValidElement(message) ? message : <FormattedMessage {...message} />}
21
+ {tooltipMessage && (
22
+ <Tooltip
23
+ className="bdl-SecurityControlsItem-tooltip"
24
+ text={<FormattedMessage {...tooltipMessage} />}
25
+ position="middle-right"
26
+ isTabbable={false}
27
+ >
28
+ <span className="bdl-SecurityControlsItem-tooltipIcon">
29
+ <IconInfo color={bdlBoxBlue} width={ICON_SIZE} height={ICON_SIZE} />
30
+ </span>
31
+ </Tooltip>
32
+ )}
33
+ </li>
34
+ );
35
+ };
33
36
 
34
37
  export default SecurityControlsItem;
@@ -13,6 +13,10 @@
13
13
  font-style: normal;
14
14
  content: '\2022';
15
15
  }
16
+
17
+ .support-link {
18
+ color: $bdl-box-blue;
19
+ }
16
20
  }
17
21
 
18
22
  .bdl-SecurityControlsItem-tooltipContent {
@@ -53,8 +53,8 @@ const SecurityControlsModal = ({
53
53
  <p className="bdl-SecurityControlsModal-definition">{definition}</p>
54
54
  </Label>
55
55
  <ul className="bdl-SecurityControlsModal-controlsItemList">
56
- {modalItems.map(({ message, tooltipMessage }) => (
57
- <SecurityControlsItem key={message.id} message={message} tooltipMessage={tooltipMessage} />
56
+ {modalItems.map(({ message, tooltipMessage }, index) => (
57
+ <SecurityControlsItem key={index} message={message} tooltipMessage={tooltipMessage} />
58
58
  ))}
59
59
  </ul>
60
60
  <ModalActions>
@@ -1,4 +1,6 @@
1
1
  import React from 'react';
2
+ import { FormattedMessage } from 'react-intl';
3
+
2
4
  import SecurityControlsItem from '../SecurityControlsItem';
3
5
  import Tooltip from '../../../../components/tooltip';
4
6
  import IconInfo from '../../../../icons/general/IconInfo';
@@ -33,4 +35,12 @@ describe('features/classification/security-controls/SecurityControlsItem', () =>
33
35
  expect(wrapper.find(Tooltip).length).toBe(0);
34
36
  expect(wrapper.find(IconInfo).length).toBe(0);
35
37
  });
38
+
39
+ test('should render message as if it is a valid element and not render FormattedMessage', () => {
40
+ const messageElement = <div>Test Element</div>;
41
+ wrapper.setProps({ message: messageElement });
42
+
43
+ expect(wrapper).toMatchSnapshot();
44
+ expect(wrapper.find(FormattedMessage).length).toBe(0);
45
+ });
36
46
  });
@@ -6,7 +6,7 @@ exports[`features/classification/security-controls/SecurityControls should rende
6
6
  className="bdl-SecurityControls"
7
7
  >
8
8
  <SecurityControlsItem
9
- key="boxui.securityControls.sharingCollabOnly"
9
+ key="0"
10
10
  message={
11
11
  Object {
12
12
  "defaultMessage": "Shared links allowed for collaborators only.",
@@ -15,7 +15,7 @@ exports[`features/classification/security-controls/SecurityControls should rende
15
15
  }
16
16
  />
17
17
  <SecurityControlsItem
18
- key="boxui.securityControls.externalCollabDomainList"
18
+ key="1"
19
19
  message={
20
20
  Object {
21
21
  "defaultMessage": "External collaboration limited to approved domains.",
@@ -24,7 +24,7 @@ exports[`features/classification/security-controls/SecurityControls should rende
24
24
  }
25
25
  />
26
26
  <SecurityControlsItem
27
- key="boxui.securityControls.desktopDownloadOwners"
27
+ key="2"
28
28
  message={
29
29
  Object {
30
30
  "defaultMessage": "Download restricted on Box Drive, except Owners/Co-Owners.",
@@ -33,7 +33,7 @@ exports[`features/classification/security-controls/SecurityControls should rende
33
33
  }
34
34
  />
35
35
  <SecurityControlsItem
36
- key="boxui.securityControls.appDownloadWhitelist"
36
+ key="3"
37
37
  message={
38
38
  Object {
39
39
  "defaultMessage": "Only select applications are allowed: {appNames}",
@@ -54,7 +54,7 @@ exports[`features/classification/security-controls/SecurityControls should rende
54
54
  className="bdl-SecurityControls"
55
55
  >
56
56
  <SecurityControlsItem
57
- key="boxui.securityControls.shortAllRestrictions"
57
+ key="0"
58
58
  message={
59
59
  Object {
60
60
  "defaultMessage": "Sharing, download and app restrictions apply",
@@ -120,7 +120,7 @@ exports[`features/classification/security-controls/SecurityControls should rende
120
120
  className="bdl-SecurityControls"
121
121
  >
122
122
  <SecurityControlsItem
123
- key="boxui.securityControls.shortAllRestrictions"
123
+ key="0"
124
124
  message={
125
125
  Object {
126
126
  "defaultMessage": "Sharing, download and app restrictions apply",
@@ -35,3 +35,38 @@ exports[`features/classification/security-controls/SecurityControlsItem should r
35
35
  </Tooltip>
36
36
  </li>
37
37
  `;
38
+
39
+ exports[`features/classification/security-controls/SecurityControlsItem should render message as if it is a valid element and not render FormattedMessage 1`] = `
40
+ <li
41
+ className="bdl-SecurityControlsItem"
42
+ >
43
+ <div>
44
+ Test Element
45
+ </div>
46
+ <Tooltip
47
+ className="bdl-SecurityControlsItem-tooltip"
48
+ constrainToScrollParent={false}
49
+ constrainToWindow={true}
50
+ isDisabled={false}
51
+ isTabbable={false}
52
+ position="middle-right"
53
+ text={
54
+ <FormattedMessage
55
+ defaultMessage="message2"
56
+ id="id2"
57
+ />
58
+ }
59
+ theme="default"
60
+ >
61
+ <span
62
+ className="bdl-SecurityControlsItem-tooltipIcon"
63
+ >
64
+ <IconInfo
65
+ color="#0061d5"
66
+ height={13}
67
+ width={13}
68
+ />
69
+ </span>
70
+ </Tooltip>
71
+ </li>
72
+ `;
@@ -51,7 +51,7 @@ exports[`features/classification/security-controls/SecurityControlsModal should
51
51
  className="bdl-SecurityControlsModal-controlsItemList"
52
52
  >
53
53
  <SecurityControlsItem
54
- key="msg1"
54
+ key="0"
55
55
  message={
56
56
  Object {
57
57
  "defaultMessage": "message1",
@@ -60,7 +60,7 @@ exports[`features/classification/security-controls/SecurityControlsModal should
60
60
  }
61
61
  />
62
62
  <SecurityControlsItem
63
- key="msg2"
63
+ key="1"
64
64
  message={
65
65
  Object {
66
66
  "defaultMessage": "message2",
@@ -0,0 +1,20 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`features/classification/security-controls/utils getFullSecurityControlsMessages() should include correct message when watermark is applied 1`] = `
4
+ <FormattedCompMessage
5
+ description="Bullet point that summarizes watermarking applied to classification"
6
+ id="boxui.securityControls.watermarkingAppliedWithLink"
7
+ >
8
+ Watermarking will be applied, click
9
+
10
+ <Link
11
+ className="support-link"
12
+ href="https://support.box.com/hc/en-us/articles/360044195253"
13
+ target="_blank"
14
+ >
15
+ here
16
+ </Link>
17
+
18
+ more details on Watermarking
19
+ </FormattedCompMessage>
20
+ `;
@@ -25,69 +25,75 @@ describe('features/classification/security-controls/utils', () => {
25
25
 
26
26
  describe('getShortSecurityControlsMessage()', () => {
27
27
  test('should return null when there are no restrictions', () => {
28
- expect(getShortSecurityControlsMessage({})).toBeNull();
28
+ expect(getShortSecurityControlsMessage({})).toEqual([]);
29
29
  });
30
30
 
31
31
  test('should not return messages when shared link restriction has a "public" access level', () => {
32
32
  accessPolicy = { sharedLink: { accessLevel: PUBLIC } };
33
- expect(getShortSecurityControlsMessage(accessPolicy)).toBeNull();
33
+ expect(getShortSecurityControlsMessage(accessPolicy)).toEqual([]);
34
34
  });
35
35
 
36
- test('should return all restrictions message when all restrictions are present', () => {
37
- accessPolicy = { sharedLink: {}, download: {}, externalCollab: {}, app: {} };
38
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortAllRestrictions);
36
+ test('should return correct message when all restrictions are present', () => {
37
+ accessPolicy = { sharedLink: {}, download: {}, externalCollab: {}, app: {}, watermark: {} };
38
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortAllRestrictions);
39
+ expect(getShortSecurityControlsMessage(accessPolicy)[1].message).toBe(messages.shortWatermarking);
39
40
  });
40
41
 
41
42
  test('should return all restrictions message when download, app and either shared link, or external collab restrictions are present', () => {
42
43
  accessPolicy = { sharedLink: {}, download: {}, app: {} };
43
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortAllRestrictions);
44
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortAllRestrictions);
44
45
  accessPolicy = { externalCollab: {}, download: {}, app: {} };
45
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortAllRestrictions);
46
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortAllRestrictions);
46
47
  });
47
48
 
48
49
  test('should return correct message when download and either shared link, or external collab restrictions are present', () => {
49
50
  accessPolicy = { sharedLink: {}, download: {} };
50
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortSharingDownload);
51
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortSharingDownload);
51
52
  accessPolicy = { externalCollab: {}, download: {} };
52
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortSharingDownload);
53
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortSharingDownload);
53
54
  });
54
55
 
55
56
  test('should return correct message when app and either shared link, or external collab restrictions are present', () => {
56
57
  accessPolicy = { sharedLink: {}, app: {} };
57
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortSharingApp);
58
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortSharingApp);
58
59
  accessPolicy = { externalCollab: {}, app: {} };
59
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortSharingApp);
60
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortSharingApp);
60
61
  });
61
62
 
62
63
  test('should return correct message when app and download restrictions are present', () => {
63
64
  accessPolicy = { download: {}, app: {} };
64
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortDownloadApp);
65
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortDownloadApp);
65
66
  });
66
67
 
67
68
  test('should return correct message when there are shared link or external collab restrictions', () => {
68
69
  accessPolicy = { sharedLink: {}, externalCollab: {} };
69
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortSharing);
70
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortSharing);
70
71
 
71
72
  accessPolicy = { sharedLink: {} };
72
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortSharing);
73
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortSharing);
73
74
 
74
75
  accessPolicy = { externalCollab: {} };
75
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortSharing);
76
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortSharing);
76
77
  });
77
78
 
78
79
  test('should return correct message when there is a download restriction', () => {
79
80
  accessPolicy = { download: {} };
80
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortDownload);
81
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortDownload);
81
82
  });
82
83
 
83
84
  test('should return correct message when there is a download restriction', () => {
84
85
  accessPolicy = { app: {} };
85
- expect(getShortSecurityControlsMessage(accessPolicy).message).toBe(messages.shortApp);
86
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortApp);
87
+ });
88
+
89
+ test('should return correct message when there is a watermark restriction', () => {
90
+ accessPolicy = { watermark: {} };
91
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].message).toBe(messages.shortWatermarking);
86
92
  });
87
93
 
88
94
  test('should not return tooltipMessage', () => {
89
95
  accessPolicy = { sharedLink: {}, download: {}, externalCollab: {}, app: {} };
90
- expect(getShortSecurityControlsMessage(accessPolicy).tooltipMessage).toBeUndefined();
96
+ expect(getShortSecurityControlsMessage(accessPolicy)[0].tooltipMessage).toBeUndefined();
91
97
  });
92
98
  });
93
99
 
@@ -112,6 +118,20 @@ describe('features/classification/security-controls/utils', () => {
112
118
  ]);
113
119
  });
114
120
 
121
+ test('should include correct message when watermark is applied', () => {
122
+ accessPolicy = {
123
+ watermark: {
124
+ enabled: true,
125
+ },
126
+ };
127
+ const { message: formattedCompMessage } = getFullSecurityControlsMessages(accessPolicy)[0];
128
+ const { props: formattedCompMessageProps = {} } = formattedCompMessage;
129
+ const expectedMessageId = 'boxui.securityControls.watermarkingAppliedWithLink';
130
+
131
+ expect(formattedCompMessageProps.id).toEqual(expectedMessageId);
132
+ expect(formattedCompMessage).toMatchSnapshot();
133
+ });
134
+
115
135
  test('should include correct message when external collab is blocked', () => {
116
136
  accessPolicy = {
117
137
  externalCollab: {
@@ -24,6 +24,11 @@ const messages = defineMessages({
24
24
  'Short summary displayed for classification when an application download restriction is applied to it',
25
25
  id: 'boxui.securityControls.shortApp',
26
26
  },
27
+ shortWatermarking: {
28
+ defaultMessage: 'Watermarking applies',
29
+ description: 'Short summary displayed for classification when watermarking is applied to it',
30
+ id: 'boxui.securityControls.shortWatermarking',
31
+ },
27
32
  shortSharingDownload: {
28
33
  defaultMessage: 'Sharing and download restrictions apply',
29
34
  description: