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
@@ -0,0 +1,97 @@
1
+ // @flow
2
+
3
+ import { toQuery, useMediaQuery as _useMediaQuery } from 'react-responsive';
4
+ import {
5
+ ANY_HOVER,
6
+ ANY_POINTER_COARSE,
7
+ ANY_POINTER_FINE,
8
+ HOVER,
9
+ HOVER_TYPE,
10
+ POINTER_COARSE,
11
+ POINTER_FINE,
12
+ POINTER_TYPE,
13
+ SIZE_LARGE,
14
+ SIZE_MEDIUM,
15
+ SIZE_SMALL,
16
+ VIEW_SIZE_TYPE,
17
+ } from './constants';
18
+ import type { MediaQuery, MediaShape } from './types';
19
+
20
+ const getPointerCapabilities = (isFine: boolean, isCoarse: boolean) => {
21
+ if (!isFine && !isCoarse) return POINTER_TYPE.none;
22
+ if (isFine) return POINTER_TYPE.fine;
23
+ return POINTER_TYPE.coarse;
24
+ };
25
+
26
+ const getViewDimensions = () => {
27
+ return { viewWidth: window.innerWidth, viewHeight: window.innerHeight };
28
+ };
29
+
30
+ /**
31
+ * Formats the media query either as a MediaQuery object or string
32
+ * @param query
33
+ * @returns {string}
34
+ */
35
+ function formatQuery(query: MediaQuery): string {
36
+ return typeof query === 'string' ? query : toQuery(query);
37
+ }
38
+
39
+ /**
40
+ * Executes media query
41
+ * @param query
42
+ * @param onQueryChange
43
+ * @returns {boolean}
44
+ */
45
+ function useQuery(query: MediaQuery, onQueryChange?: (_: boolean) => void): boolean {
46
+ return _useMediaQuery({ query: formatQuery(query) }, null, onQueryChange);
47
+ }
48
+
49
+ /**
50
+ * Determines device capabilities for hover and pointer features
51
+ * @returns {{anyPointer: *, hover: (string), pointer: *, anyHover: (string)}}
52
+ */
53
+ function useDeviceCapabilities() {
54
+ const isHover: boolean = useQuery(HOVER);
55
+ const isAnyHover: boolean = useQuery(ANY_HOVER);
56
+
57
+ const anyHover = isAnyHover ? HOVER_TYPE.hover : HOVER_TYPE.none;
58
+ const hover = isHover ? HOVER_TYPE.hover : HOVER_TYPE.none;
59
+ const pointer = getPointerCapabilities(useQuery(POINTER_FINE), useQuery(POINTER_COARSE));
60
+ const anyPointer = getPointerCapabilities(useQuery(ANY_POINTER_FINE), useQuery(ANY_POINTER_COARSE));
61
+
62
+ return {
63
+ anyHover,
64
+ hover,
65
+ anyPointer,
66
+ pointer,
67
+ };
68
+ }
69
+
70
+ /**
71
+ * Determines device size using media queries
72
+ * @returns {string}
73
+ */
74
+ function useDeviceSize() {
75
+ const isSmall: boolean = useQuery(SIZE_SMALL);
76
+ const isMedium: boolean = useQuery(SIZE_MEDIUM);
77
+ const isLarge: boolean = useQuery(SIZE_LARGE);
78
+
79
+ if (isSmall) return VIEW_SIZE_TYPE.small;
80
+ if (isMedium) return VIEW_SIZE_TYPE.medium;
81
+ if (isLarge) return VIEW_SIZE_TYPE.large;
82
+
83
+ return VIEW_SIZE_TYPE.xlarge;
84
+ }
85
+
86
+ function useMediaQuery(): MediaShape {
87
+ const deviceCapabilities = useDeviceCapabilities();
88
+ const deviceSize = useDeviceSize();
89
+ const viewDimensions = getViewDimensions();
90
+ return {
91
+ ...deviceCapabilities,
92
+ ...viewDimensions,
93
+ size: deviceSize,
94
+ };
95
+ }
96
+
97
+ export default useMediaQuery;
@@ -0,0 +1,23 @@
1
+ // @flow
2
+
3
+ import * as React from 'react';
4
+ import useMediaQuery from './useMediaQuery';
5
+ import type { MediaShape } from './types';
6
+
7
+ type PropsShape = {
8
+ children: React.Node,
9
+ };
10
+
11
+ function withMediaQuery<Props: PropsShape>(WrappedComponent: React.ComponentType<any>): React.ComponentType<any> {
12
+ return ({ children, ...rest }: Props) => {
13
+ const mediaProps: MediaShape = useMediaQuery();
14
+
15
+ return (
16
+ <WrappedComponent {...rest} {...mediaProps}>
17
+ {children}
18
+ </WrappedComponent>
19
+ );
20
+ };
21
+ }
22
+
23
+ export default withMediaQuery;
@@ -1,5 +1,6 @@
1
1
  @import '../../styles/variables';
2
2
  @import '../../styles/mixins/buttons';
3
+ @import '../../styles/constants/media-queries';
3
4
 
4
5
  /**************************************
5
6
  * Modal
@@ -56,6 +57,7 @@
56
57
  display: flex;
57
58
  flex-direction: column;
58
59
  width: 460px;
60
+ max-width: 100%;
59
61
  margin: auto;
60
62
  padding: 30px;
61
63
  background-color: $white;
@@ -133,3 +135,28 @@
133
135
  z-index: 89;
134
136
  display: flex;
135
137
  }
138
+
139
+ //Responsive support - triggers fullscreen mode after reaching $small-medium-screen width
140
+ .is-responsive-web {
141
+ @include breakpoint($small-medium-screen) {
142
+ .modal {
143
+ flex-direction: column;
144
+ padding: 0;
145
+ }
146
+
147
+ .modal-dialog {
148
+ min-height: 100%;
149
+ padding: 22px 16px 12px 16px;
150
+ border-radius: 0;
151
+ }
152
+
153
+ .modal-close-button {
154
+ right: 10px;
155
+ }
156
+ }
157
+
158
+ .modal-dialog-container {
159
+ flex-basis: 100%;
160
+ width: 100%;
161
+ }
162
+ }
@@ -1,3 +1,5 @@
1
+ import { sizeSmallMax } from '../../../styles/variables';
2
+
1
3
  describe('components/modal/Modal', () => {
2
4
  const MODAL_STORIES = ['components-modal--basic', 'components-modal--with-custom-backdrop-click-handler'];
3
5
 
@@ -10,4 +12,12 @@ describe('components/modal/Modal', () => {
10
12
  const image = await BoxVisualTestUtils.takeModalScreenshot(id);
11
13
  return expect(image).toMatchImageSnapshot();
12
14
  });
15
+
16
+ test.each(MODAL_STORIES)(
17
+ 'looks visually correct for small screens when button is clicked in story %s',
18
+ async id => {
19
+ const image = await BoxVisualTestUtils.takeModalScreenshot(id, parseInt(sizeSmallMax, 10));
20
+ return expect(image).toMatchImageSnapshot();
21
+ },
22
+ );
13
23
  });
@@ -29,6 +29,8 @@ import IconFileThreeD from '../../icon/content/FileThreeD32';
29
29
  import IconFileVector from '../../icon/content/FileVector32';
30
30
  import IconFileVideo from '../../icon/content/FileVideo32';
31
31
  import IconFileWord from '../../icon/content/FileWord32';
32
+ import IconFileXbd from '../../icon/content/FileXbd32';
33
+ import IconFileXdw from '../../icon/content/FileXdw32';
32
34
  import IconFileZip from '../../icon/content/FileZip32';
33
35
  import { SVGProps } from '../accessible-svg/AccessibleSVG';
34
36
 
@@ -168,6 +170,8 @@ register(IconFileVideo, '#009AED', [
168
170
  'wmv',
169
171
  ]);
170
172
  register(IconFileWord, '#185ABD', ['doc', 'docx']);
173
+ register(IconFileXbd, '#00838D', ['xbd']);
174
+ register(IconFileXdw, '#00838D', ['xdw']);
171
175
  register(IconFileZip, vars.bdlGray20, ['tgz', 'zip']);
172
176
 
173
177
  export const getColor = (extension?: string): Config['color'] => {
@@ -17,11 +17,6 @@
17
17
  border: 0;
18
18
  cursor: pointer;
19
19
 
20
- &:hover,
21
- &:focus {
22
- outline: none;
23
- }
24
-
25
20
  path {
26
21
  transition: fill linear .1s;
27
22
  }
@@ -204,7 +204,8 @@ class SelectorDropdown extends React.Component<Props, State> {
204
204
  this.resetActiveItem();
205
205
  }
206
206
  break;
207
- // no default
207
+ default:
208
+ this.handleInput();
208
209
  }
209
210
  };
210
211
 
@@ -296,7 +297,7 @@ class SelectorDropdown extends React.Component<Props, State> {
296
297
  </ul>
297
298
  );
298
299
 
299
- // change onKeyPress/onPaste back to onInput when React fixes this IE11 bug: https://github.com/facebook/react/issues/7280
300
+ // change onPaste back to onInput when React fixes this IE11 bug: https://github.com/facebook/react/issues/7280
300
301
 
301
302
  // We're simulating the blur event with the tab key listener and the
302
303
  // click listener as a proxy because IE will trigger a blur when
@@ -307,7 +308,6 @@ class SelectorDropdown extends React.Component<Props, State> {
307
308
  className={classNames('SelectorDropdown', className)}
308
309
  onFocus={this.handleFocus}
309
310
  onKeyDown={this.handleKeyDown}
310
- onKeyPress={this.handleInput}
311
311
  onPaste={this.handleInput}
312
312
  ref={this.selectorDropdownRef}
313
313
  >
@@ -172,12 +172,16 @@ describe('components/selector-dropdown/SelectorDropdown', () => {
172
172
 
173
173
  describe('handleInput()', () => {
174
174
  test('should call openDropdown() when key is pressed', () => {
175
+ const event = {
176
+ key: 'a',
177
+ };
178
+
175
179
  const wrapper = renderEmptyDropdown();
176
180
  const instance = wrapper.instance();
177
181
 
178
182
  sandbox.mock(instance).expects('openDropdown');
179
183
 
180
- wrapper.simulate('keyPress');
184
+ wrapper.simulate('keyDown', event);
181
185
  });
182
186
 
183
187
  test('should call openDropdown() when text is pasted', () => {
@@ -45,7 +45,6 @@ exports[`components/sidebar-toggle-button/SidebarToggleButton should render corr
45
45
  key=".0"
46
46
  onBlur={[Function]}
47
47
  onFocus={[Function]}
48
- onKeyDown={[Function]}
49
48
  onMouseEnter={[Function]}
50
49
  onMouseLeave={[Function]}
51
50
  tabIndex="0"
@@ -56,7 +55,6 @@ exports[`components/sidebar-toggle-button/SidebarToggleButton should render corr
56
55
  className="btn-plain bdl-SidebarToggleButton bdl-is-collapsed"
57
56
  onBlur={[Function]}
58
57
  onFocus={[Function]}
59
- onKeyDown={[Function]}
60
58
  onMouseEnter={[Function]}
61
59
  onMouseLeave={[Function]}
62
60
  tabIndex="0"
@@ -144,7 +142,6 @@ exports[`components/sidebar-toggle-button/SidebarToggleButton should render corr
144
142
  key=".0"
145
143
  onBlur={[Function]}
146
144
  onFocus={[Function]}
147
- onKeyDown={[Function]}
148
145
  onMouseEnter={[Function]}
149
146
  onMouseLeave={[Function]}
150
147
  tabIndex="0"
@@ -155,7 +152,6 @@ exports[`components/sidebar-toggle-button/SidebarToggleButton should render corr
155
152
  className="btn-plain bdl-SidebarToggleButton bdl-is-collapsed"
156
153
  onBlur={[Function]}
157
154
  onFocus={[Function]}
158
- onKeyDown={[Function]}
159
155
  onMouseEnter={[Function]}
160
156
  onMouseLeave={[Function]}
161
157
  tabIndex="0"
@@ -243,7 +239,6 @@ exports[`components/sidebar-toggle-button/SidebarToggleButton should render corr
243
239
  key=".0"
244
240
  onBlur={[Function]}
245
241
  onFocus={[Function]}
246
- onKeyDown={[Function]}
247
242
  onMouseEnter={[Function]}
248
243
  onMouseLeave={[Function]}
249
244
  tabIndex="0"
@@ -254,7 +249,6 @@ exports[`components/sidebar-toggle-button/SidebarToggleButton should render corr
254
249
  className="btn-plain bdl-SidebarToggleButton"
255
250
  onBlur={[Function]}
256
251
  onFocus={[Function]}
257
- onKeyDown={[Function]}
258
252
  onMouseEnter={[Function]}
259
253
  onMouseLeave={[Function]}
260
254
  tabIndex="0"
@@ -340,7 +334,6 @@ exports[`components/sidebar-toggle-button/SidebarToggleButton should render corr
340
334
  key=".0"
341
335
  onBlur={[Function]}
342
336
  onFocus={[Function]}
343
- onKeyDown={[Function]}
344
337
  onMouseEnter={[Function]}
345
338
  onMouseLeave={[Function]}
346
339
  tabIndex="0"
@@ -351,7 +344,6 @@ exports[`components/sidebar-toggle-button/SidebarToggleButton should render corr
351
344
  className="btn-plain bdl-SidebarToggleButton"
352
345
  onBlur={[Function]}
353
346
  onFocus={[Function]}
354
- onKeyDown={[Function]}
355
347
  onMouseEnter={[Function]}
356
348
  onMouseLeave={[Function]}
357
349
  tabIndex="0"
@@ -107,10 +107,6 @@
107
107
  }
108
108
  }
109
109
 
110
- .tab:focus {
111
- outline: 1px dotted $primary-color;
112
- }
113
-
114
110
  .tab:hover,
115
111
  .tab:focus {
116
112
  .tab-title {
@@ -130,15 +130,30 @@ class Tooltip extends React.Component<TooltipProps, State> {
130
130
  this.setState({ hasRendered: true });
131
131
  }
132
132
 
133
- componentDidUpdate(prevProps: TooltipProps) {
133
+ componentDidUpdate(prevProps: TooltipProps, prevState: State) {
134
+ const isControlled = this.isControlled();
135
+
134
136
  // Reset wasClosedByUser state when isShown transitions from false to true
135
- if (this.isControlled()) {
137
+ if (isControlled) {
136
138
  if (!prevProps.isShown && this.props.isShown) {
137
139
  this.setState({ wasClosedByUser: false });
138
140
  }
141
+ } else {
142
+ if (!prevState.isShown && this.state.isShown) {
143
+ // capture event so that tooltip closes before any other floating components that can be closed by
144
+ // "Escape" key(e.g. Modal, Menu, etc.)
145
+ document.addEventListener('keydown', this.handleKeyDown, true);
146
+ }
147
+ if (prevState.isShown && !this.state.isShown) {
148
+ document.removeEventListener('keydown', this.handleKeyDown, true);
149
+ }
139
150
  }
140
151
  }
141
152
 
153
+ componentWillUnmount() {
154
+ document.removeEventListener('keydown', this.handleKeyDown, true);
155
+ }
156
+
142
157
  tooltipID = uniqueId('tooltip');
143
158
 
144
159
  tetherRef = React.createRef<TetherComponent>();
@@ -158,7 +173,7 @@ class Tooltip extends React.Component<TooltipProps, State> {
158
173
  }
159
174
  };
160
175
 
161
- fireChildEvent = (type: string, event: React.SyntheticEvent<HTMLElement>) => {
176
+ fireChildEvent = (type: string, event: React.SyntheticEvent<HTMLElement> | Event) => {
162
177
  const { children } = this.props;
163
178
  const handler = (children as React.ReactElement).props[type];
164
179
  if (handler) {
@@ -196,8 +211,9 @@ class Tooltip extends React.Component<TooltipProps, State> {
196
211
  return typeof isShownProp !== 'undefined';
197
212
  };
198
213
 
199
- handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {
214
+ handleKeyDown = (event: KeyboardEvent) => {
200
215
  if (event.key === 'Escape') {
216
+ event.stopPropagation();
201
217
  this.setState({ isShown: false });
202
218
  }
203
219
  this.fireChildEvent('onKeyDown', event);
@@ -278,7 +294,6 @@ class Tooltip extends React.Component<TooltipProps, State> {
278
294
  if (!isControlled) {
279
295
  componentProps.onBlur = this.handleBlur;
280
296
  componentProps.onFocus = this.handleFocus;
281
- componentProps.onKeyDown = this.handleKeyDown;
282
297
  componentProps.onMouseEnter = this.handleMouseEnter;
283
298
  componentProps.onMouseLeave = this.handleMouseLeave;
284
299
 
@@ -3,6 +3,8 @@
3
3
  import * as React from 'react';
4
4
  import sinon from 'sinon';
5
5
  import { shallow } from 'enzyme';
6
+ import noop from 'lodash/noop';
7
+
6
8
  import Tooltip, { TooltipPosition, TooltipTheme } from '../Tooltip';
7
9
  import TetherPosition from '../../../common/tether-positions';
8
10
 
@@ -89,7 +91,6 @@ describe('components/tooltip/Tooltip', () => {
89
91
  expect(component.is('button')).toBe(true);
90
92
  expect(component.prop('onBlur')).toBeTruthy();
91
93
  expect(component.prop('onFocus')).toBeTruthy();
92
- expect(component.prop('onKeyDown')).toBeTruthy();
93
94
  expect(component.prop('onMouseEnter')).toBeTruthy();
94
95
  expect(component.prop('onMouseLeave')).toBeTruthy();
95
96
  expect(component.prop('tabIndex')).toEqual('0');
@@ -477,18 +478,29 @@ describe('components/tooltip/Tooltip', () => {
477
478
 
478
479
  describe('handleKeyDown()', () => {
479
480
  test('should update isShown state only when escape key is pressed', () => {
481
+ const map: { [key: string]: Function } = {};
482
+ document.addEventListener = jest.fn().mockImplementationOnce((event, cb) => {
483
+ map[event] = cb;
484
+ });
480
485
  const wrapper = shallow(
481
486
  <Tooltip text="hi">
482
487
  <button />
483
488
  </Tooltip>,
484
489
  );
485
490
  wrapper.setState({ isShown: true });
486
-
487
- wrapper.find('button').simulate('keydown', { key: 'Escape' });
491
+ map.keydown({
492
+ key: 'Escape',
493
+ stopPropagation: noop,
494
+ });
495
+ expect(document.addEventListener).toHaveBeenCalledWith('keydown', expect.anything(), true);
488
496
  expect(wrapper.state('isShown')).toBe(false);
489
497
  });
490
498
 
491
499
  test('should not update isShown state only when some other key is pressed', () => {
500
+ const map: { [key: string]: Function } = {};
501
+ document.addEventListener = jest.fn().mockImplementationOnce((event, cb) => {
502
+ map[event] = cb;
503
+ });
492
504
  const wrapper = shallow(
493
505
  <Tooltip text="hi">
494
506
  <button />
@@ -496,7 +508,8 @@ describe('components/tooltip/Tooltip', () => {
496
508
  );
497
509
  wrapper.setState({ isShown: true });
498
510
 
499
- wrapper.find('button').simulate('keydown', { key: 'Space' });
511
+ map.keydown({ key: 'Space' });
512
+ expect(document.addEventListener).toHaveBeenCalledWith('keydown', expect.anything(), true);
500
513
  expect(wrapper.state('isShown')).toBe(true);
501
514
  });
502
515
 
@@ -135,7 +135,6 @@ exports[`components/tooltip/Tooltip render() should render children wrapped in t
135
135
  <div
136
136
  onBlur={[Function]}
137
137
  onFocus={[Function]}
138
- onKeyDown={[Function]}
139
138
  onMouseEnter={[Function]}
140
139
  onMouseLeave={[Function]}
141
140
  tabIndex="0"
@@ -205,7 +204,6 @@ exports[`components/tooltip/Tooltip render() should render correctly with tether
205
204
  <div
206
205
  onBlur={[Function]}
207
206
  onFocus={[Function]}
208
- onKeyDown={[Function]}
209
207
  onMouseEnter={[Function]}
210
208
  onMouseLeave={[Function]}
211
209
  tabIndex="0"
package/src/constants.js CHANGED
@@ -304,6 +304,7 @@ export const ORIGIN_METADATA_SIDEBAR: 'metadata_sidebar' = 'metadata_sidebar';
304
304
  export const ORIGIN_SKILLS_SIDEBAR: 'skills_sidebar' = 'skills_sidebar';
305
305
  export const ORIGIN_VERSIONS_SIDEBAR: 'versions_sidebar' = 'versions_sidebar';
306
306
  export const ORIGIN_PREVIEW: 'preview' = 'preview';
307
+ export const ORIGIN_PREVIEW_SIDEBAR: 'preview_sidebar' = 'preview_sidebar';
307
308
  export const ORIGIN_CONTENT_EXPLORER: 'content_explorer' = 'content_explorer';
308
309
  export const ORIGIN_OPEN_WITH: 'open_with' = 'open_with';
309
310
 
@@ -4,14 +4,12 @@
4
4
  * @author Box
5
5
  */
6
6
  import * as React from 'react';
7
- import IconAdobeSign from '../../icons/adobe-sign/IconAdobeSign';
8
7
  import IconGoogleDocs from '../../icons/google-docs/IconGoogleDocs';
9
8
  import IconGoogleSheets from '../../icons/google-docs/IconGoogleSheets';
10
9
  import IconGoogleSlides from '../../icons/google-docs/IconGoogleSlides';
11
10
  import FileIcon from '../../icons/file-icon/FileIcon';
12
11
 
13
12
  const ICON_FILE_MAP = {
14
- 'Adobe Sign': IconAdobeSign,
15
13
  'Google Docs': IconGoogleDocs,
16
14
  'Google Docs (beta)': IconGoogleDocs,
17
15
  'Google Sheets': IconGoogleSheets,
@@ -8,7 +8,7 @@ import BoxToolsInstallMessage from '../BoxToolsInstallMessage';
8
8
 
9
9
  jest.mock('lodash/uniqueId', () => () => 'uniqueId');
10
10
 
11
- const ADOBE_INTEGRATION_ID = '1234';
11
+ const ABCD_INTEGRATION_ID = '1234';
12
12
  const BLACKLISTED_ERROR_MESSAGE_KEY = 'boxToolsBlacklistedError';
13
13
  const BOX_TOOLS_INSTALL_ERROR_MESSAGE_KEY = 'boxToolsInstallErrorMessage';
14
14
 
@@ -51,7 +51,7 @@ describe('elements/content-open-with/ContentOpenWith', () => {
51
51
 
52
52
  describe('isBoxEditIntegration()', () => {
53
53
  test('should determine if the integration is a Box Edit integration', () => {
54
- expect(instance.isBoxEditIntegration(ADOBE_INTEGRATION_ID)).toBe(false);
54
+ expect(instance.isBoxEditIntegration(ABCD_INTEGRATION_ID)).toBe(false);
55
55
  expect(instance.isBoxEditIntegration(BOX_EDIT_INTEGRATION_ID)).toBe(true);
56
56
  expect(instance.isBoxEditIntegration(BOX_EDIT_SFC_INTEGRATION_ID)).toBe(true);
57
57
  });
@@ -59,7 +59,7 @@ describe('elements/content-open-with/ContentOpenWith', () => {
59
59
 
60
60
  describe('isBoxEditSFCIntegration()', () => {
61
61
  test('should determine if the integration is a Box Edit SFC integration', () => {
62
- expect(instance.isBoxEditSFCIntegration(ADOBE_INTEGRATION_ID)).toBe(false);
62
+ expect(instance.isBoxEditSFCIntegration(ABCD_INTEGRATION_ID)).toBe(false);
63
63
  expect(instance.isBoxEditSFCIntegration(BOX_EDIT_INTEGRATION_ID)).toBe(false);
64
64
  expect(instance.isBoxEditSFCIntegration(BOX_EDIT_SFC_INTEGRATION_ID)).toBe(true);
65
65
  });
@@ -100,7 +100,7 @@ describe('elements/content-open-with/ContentOpenWith', () => {
100
100
  mockIntegrations = [
101
101
  {
102
102
  isDisabled: false,
103
- name: 'Adobe',
103
+ name: 'ABCD',
104
104
  appIntegrationId: '2',
105
105
  disabledReasons: [],
106
106
  },
@@ -299,7 +299,7 @@ describe('elements/content-open-with/ContentOpenWith', () => {
299
299
 
300
300
  displayIntegration = {
301
301
  appIntegrationId: '1',
302
- displayName: 'Adobe Sign',
302
+ displayName: 'Google Docs',
303
303
  };
304
304
 
305
305
  instance.setState = jest.fn();
@@ -523,7 +523,7 @@ describe('elements/content-open-with/ContentOpenWith', () => {
523
523
  const result = instance.getDisplayIntegration();
524
524
  expect(result).toEqual(null);
525
525
 
526
- instance.setState({ integrations: ['Adobe', 'Google'] });
526
+ instance.setState({ integrations: ['ABCD', 'Google'] });
527
527
  const multipleResult = instance.getDisplayIntegration();
528
528
  expect(multipleResult).toEqual(null);
529
529
 
@@ -534,9 +534,9 @@ describe('elements/content-open-with/ContentOpenWith', () => {
534
534
 
535
535
  test('should return the sole integration as the display integration', () => {
536
536
  instance = getWrapper({ fileId }).instance();
537
- instance.setState({ integrations: ['Adobe'] });
537
+ instance.setState({ integrations: ['ABCD'] });
538
538
  const result = instance.getDisplayIntegration();
539
- expect(result).toEqual('Adobe');
539
+ expect(result).toEqual('ABCD');
540
540
  });
541
541
  });
542
542
 
@@ -547,7 +547,7 @@ describe('elements/content-open-with/ContentOpenWith', () => {
547
547
 
548
548
  test('should render the Open With button if there is one or fewer integrations', () => {
549
549
  instance.setState({
550
- integrations: ['Adobe'],
550
+ integrations: ['ABCD'],
551
551
  isLoading: false,
552
552
  });
553
553
  expect(wrapper).toMatchSnapshot();
@@ -555,7 +555,7 @@ describe('elements/content-open-with/ContentOpenWith', () => {
555
555
 
556
556
  test('should render the Open With dropdown if there is more than one integration', () => {
557
557
  instance.setState({
558
- integrations: ['Adobe', 'Google Suite'],
558
+ integrations: ['ABCD', 'Google Suite'],
559
559
  isLoading: false,
560
560
  });
561
561
  expect(wrapper).toMatchSnapshot();
@@ -563,7 +563,7 @@ describe('elements/content-open-with/ContentOpenWith', () => {
563
563
 
564
564
  test('should render the PortalContainer if the integration is loading', () => {
565
565
  instance.setState({
566
- integrations: ['Adobe', 'Google Suite'],
566
+ integrations: ['ABCD', 'Google Suite'],
567
567
  shouldRenderLoadingIntegrationPortal: true,
568
568
  });
569
569
  expect(wrapper).toMatchSnapshot();
@@ -571,7 +571,7 @@ describe('elements/content-open-with/ContentOpenWith', () => {
571
571
 
572
572
  test('should render the PortalContainer if the integration is errored', () => {
573
573
  instance.setState({
574
- integrations: ['Adobe', 'Google Suite'],
574
+ integrations: ['ABCD', 'Google Suite'],
575
575
  shouldRenderErrorIntegrationPortal: true,
576
576
  });
577
577
  expect(wrapper).toMatchSnapshot();
@@ -579,7 +579,7 @@ describe('elements/content-open-with/ContentOpenWith', () => {
579
579
 
580
580
  test('should render the ExecuteForm if we have data to post', () => {
581
581
  instance.setState({
582
- integrations: ['Adobe'],
582
+ integrations: ['ABCD'],
583
583
  executePostData: {
584
584
  url: 'foo.com',
585
585
  params: [{ foo: 'bar' }],
@@ -39,7 +39,7 @@ describe('elements/content-open-with/OpenWithButton', () => {
39
39
 
40
40
  test('should render as disabled if the integration is disabled', () => {
41
41
  const wrapper = getWrapper({
42
- displayIntegration: { isDisabled: true, displayName: 'Adobe Sign' },
42
+ displayIntegration: { isDisabled: true, displayName: 'Google Docs' },
43
43
  onClick: noop,
44
44
  });
45
45
  expect(wrapper).toMatchSnapshot();
@@ -11,10 +11,6 @@ describe('elements/content-open-with/OpenWithDropdownMenu', () => {
11
11
  const integrations = [
12
12
  {
13
13
  appIntegrationId: 1,
14
- displayName: 'Adobe Sign',
15
- },
16
- {
17
- appIntegrationId: 2,
18
14
  displayName: 'Google Docs',
19
15
  },
20
16
  ];
@@ -23,7 +19,7 @@ describe('elements/content-open-with/OpenWithDropdownMenu', () => {
23
19
  integrations,
24
20
  onClick: noop,
25
21
  });
26
- expect(wrapper.find(Menu).children()).toHaveLength(2);
22
+ expect(wrapper.find(Menu).children()).toHaveLength(1);
27
23
 
28
24
  expect(wrapper).toMatchSnapshot();
29
25
  });
@@ -10,8 +10,8 @@ describe('elements/content-open-with/OpenWithDropdownMenuItem', () => {
10
10
  test('should render the description and correct icon', () => {
11
11
  const props = {
12
12
  integration: {
13
- displayName: 'Adobe Sign',
14
- displayDescription: 'Open With Adobe',
13
+ displayName: 'Google Docs',
14
+ displayDescription: 'Open With Google Docs',
15
15
  appIntegrationId: '1',
16
16
  disabledReasons: [],
17
17
  },