passbolt-styleguide 3.3.3 → 3.4.0-alpha2

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 (485) hide show
  1. package/build/css/help.min.css +4 -4
  2. package/build/css/public.min.css +5 -6
  3. package/build/css/themes/default/api_authentication.min.css +3 -3
  4. package/build/css/themes/default/api_cloud.min.css +3 -7
  5. package/build/css/themes/default/api_main.min.css +4 -9
  6. package/build/css/themes/default/api_reports.min.css +4 -9
  7. package/build/css/themes/default/api_webinstaller.min.css +4 -9
  8. package/build/css/themes/default/ext_app.min.css +4 -9
  9. package/build/css/themes/default/ext_authentication.min.css +3 -3
  10. package/build/css/themes/default/ext_external.min.css +3 -3
  11. package/build/css/themes/default/ext_in_form_cta.min.css +9 -0
  12. package/build/css/themes/default/ext_in_form_menu.min.css +9 -0
  13. package/build/css/themes/default/ext_quickaccess.min.css +3 -3
  14. package/build/css/themes/midgar/api_authentication.min.css +9 -0
  15. package/build/css/themes/midgar/api_main.min.css +4 -9
  16. package/build/css/themes/midgar/api_reports.min.css +4 -9
  17. package/build/css/themes/midgar/ext_app.min.css +4 -9
  18. package/build/css/themes/midgar/ext_authentication.min.css +3 -3
  19. package/build/css/themes/midgar/ext_in_form_cta.min.css +9 -0
  20. package/build/css/themes/midgar/ext_in_form_menu.min.css +9 -0
  21. package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
  22. package/build/js/dist/api-app.js +1 -1
  23. package/build/js/dist/api-app.js.LICENSE.txt +5 -5
  24. package/build/js/dist/api-recover.js +1 -1
  25. package/build/js/dist/api-recover.js.LICENSE.txt +0 -28
  26. package/build/js/dist/api-setup.js +1 -1
  27. package/build/js/dist/api-setup.js.LICENSE.txt +0 -15
  28. package/build/js/dist/api-triage.js +1 -1
  29. package/build/js/dist/api-triage.js.LICENSE.txt +0 -14
  30. package/build/js/dist/api-vendors.js +1 -1
  31. package/build/js/dist/api-vendors.js.LICENSE.txt +146 -84
  32. package/package.json +31 -26
  33. package/src/img/controls/chevron-down_blue.svg +3 -0
  34. package/src/img/diagrams/functional_overview.png +0 -0
  35. package/src/img/diagrams/functional_overview.svg +4 -0
  36. package/src/img/diagrams/howitworks.svg +2797 -0
  37. package/src/img/diagrams/mobile-transfer.svg +296 -0
  38. package/src/img/diagrams/sequence_diagram_form_authenticate.png +0 -0
  39. package/src/img/diagrams/sequence_diagram_gpg_authenticate.png +0 -0
  40. package/src/img/diagrams/totp.svg +251 -0
  41. package/src/img/illustrations/pin_passbolt.gif +0 -0
  42. package/src/img/illustrations/wave-pin_my_extension.svg +1 -0
  43. package/src/img/logo/icon-32-badge-1.png +0 -0
  44. package/src/img/logo/icon-32-badge-2.png +0 -0
  45. package/src/img/logo/icon-32-badge-3.png +0 -0
  46. package/src/img/logo/icon-32-badge-4.png +0 -0
  47. package/src/img/logo/icon-32-badge-5+.png +0 -0
  48. package/src/img/logo/icon-32-badge-5.png +0 -0
  49. package/src/img/logo/icon-32-signout.png +0 -0
  50. package/src/img/logo/icon-badge-1.svg +1 -0
  51. package/src/img/logo/icon-badge-2.svg +1 -0
  52. package/src/img/logo/icon-badge-3.svg +1 -0
  53. package/src/img/logo/icon-badge-4.svg +1 -0
  54. package/src/img/logo/icon-badge-5+.svg +1 -0
  55. package/src/img/logo/icon-badge-5.svg +1 -0
  56. package/src/img/logo/icon-inactive.svg +1 -0
  57. package/src/img/logo/icon-without-badge.svg +1 -0
  58. package/src/img/third_party/ChromeWebStore_black.svg +1 -0
  59. package/src/img/third_party/ChromeWebStore_white.svg +1 -0
  60. package/src/img/third_party/edge-addon-black.svg +1 -0
  61. package/src/img/third_party/edge-addon-white.svg +1 -0
  62. package/src/locales/de-DE/common.json +820 -0
  63. package/src/locales/en-UK/common.json +86 -20
  64. package/src/locales/fr/common.json +750 -0
  65. package/src/locales/fr-FR/common.json +92 -22
  66. package/src/locales/sv-SE/common.json +820 -0
  67. package/src/react-extension/ExtApp.js +16 -10
  68. package/src/react-extension/ExtBootstrapApp.js +1 -0
  69. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +2 -2
  70. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.js +2 -2
  71. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +1 -1
  72. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +1 -1
  73. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +22 -8
  74. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.data.js +3 -0
  75. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +10 -8
  76. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +21 -19
  77. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.page.js +6 -6
  78. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +0 -1
  79. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +1 -1
  80. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +1 -1
  81. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +5 -8
  82. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.js +20 -38
  83. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data.js +4 -1
  84. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.js +4 -4
  85. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +1 -1
  86. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +1 -1
  87. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.js +2 -3
  88. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.stories.js +5 -9
  89. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +34 -32
  90. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.js +1 -1
  91. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +0 -3
  92. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +1 -1
  93. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.test.page.js +2 -2
  94. package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.js +1 -1
  95. package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.test.stories.js +12 -15
  96. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.js +2 -2
  97. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.test.js +1 -1
  98. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailbox.test.stories.js +12 -14
  99. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +2 -1
  100. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.stories.js +12 -15
  101. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.js +1 -2
  102. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.stories.js +12 -15
  103. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +9 -19
  104. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.stories.js +12 -15
  105. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.stories.js +12 -15
  106. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +12 -15
  107. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.stories.js +12 -15
  108. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.stories.js +12 -15
  109. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.js +1 -1
  110. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.stories.js +12 -15
  111. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.stories.js +12 -15
  112. package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.stories.js +12 -15
  113. package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.data.js +14 -0
  114. package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.js +65 -0
  115. package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.page.js +38 -0
  116. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.stories.js +12 -15
  117. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +15 -6
  118. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.js +27 -0
  119. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.stories.js +12 -15
  120. package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.js +107 -0
  121. package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.data.js +11 -0
  122. package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.js +65 -0
  123. package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.page.js +73 -0
  124. package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.stories.js +34 -0
  125. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.stories.js +8 -11
  126. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.js +1 -1
  127. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.stories.js +12 -15
  128. package/src/react-extension/components/AuthenticationLogin/DisplayLoginError/DisplayLoginError.test.stories.js +12 -15
  129. package/src/react-extension/components/AuthenticationLogin/DisplayLoginInProgress/DisplayLoginProgress.test.stories.js +12 -15
  130. package/src/react-extension/components/AuthenticationLogin/Login/Login.js +3 -1
  131. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.stories.js +12 -15
  132. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.js +2 -1
  133. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.js +1 -1
  134. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.stories.js +5 -11
  135. package/src/react-extension/components/AuthenticationRecover/RecoverAuthentication/RecoverAuthentication.js +5 -1
  136. package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +4 -0
  137. package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.data.js +0 -2
  138. package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.js +4 -5
  139. package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.page.js +0 -1
  140. package/src/react-extension/components/Common/Avatar/UserAvatar.js +2 -1
  141. package/src/react-extension/components/Common/Error/ShowErrorDetails/ShowErrorDetails.js +126 -0
  142. package/src/react-extension/components/Common/Icons/AnimatedFeedback.js +58 -0
  143. package/src/react-extension/components/Common/Icons/Icon.js +16 -0
  144. package/src/react-extension/components/Common/Icons/Icon.test.stories.js +78 -0
  145. package/src/react-extension/components/Common/Inputs/FormSubmitButton/FormSubmitButton.js +4 -0
  146. package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.js +2 -1
  147. package/src/react-extension/components/Common/Menu/DisplayMainMenu.js +2 -4
  148. package/src/react-extension/components/Common/Navigation/Search/SearchBar.js +1 -1
  149. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.js +1 -1
  150. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.js +1 -1
  151. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.stories.js +34 -0
  152. package/src/react-extension/components/Common/Tab/Tab.js +65 -0
  153. package/src/react-extension/components/Common/Tab/Tabs.js +87 -0
  154. package/src/react-extension/components/Resource/CreateResource/CreateResource.js +85 -66
  155. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.data.js +80 -1
  156. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.js +18 -39
  157. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.page.js +27 -8
  158. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.stories.js +70 -4
  159. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.js +1 -1
  160. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayDragResource.js +68 -0
  161. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +20 -47
  162. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.test.page.js +4 -1
  163. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +2 -2
  164. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.test.data.js +1 -7
  165. package/src/react-extension/components/Resource/EditResource/EditResource.js +93 -68
  166. package/src/react-extension/components/Resource/EditResource/EditResource.test.data.js +80 -1
  167. package/src/react-extension/components/Resource/EditResource/EditResource.test.js +10 -39
  168. package/src/react-extension/components/Resource/EditResource/EditResource.test.page.js +26 -11
  169. package/src/react-extension/components/Resource/ExportResources/ExportResources.js +1 -1
  170. package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js +5 -11
  171. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js +10 -12
  172. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.stories.js +5 -11
  173. package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.js +4 -4
  174. package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.test.stories.js +0 -1
  175. package/src/react-extension/components/Resource/FilterResourcesByFolders/DisplayDragFolderItem.js +109 -0
  176. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.js +41 -193
  177. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.data.js +10 -5
  178. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.js +9 -12
  179. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.page.js +6 -2
  180. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.stories.js +0 -1
  181. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.js +83 -58
  182. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.data.js +52 -59
  183. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.js +25 -20
  184. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.page.js +11 -5
  185. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItemContextualMenu.js +1 -1
  186. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByRootFolderContextualMenu.js +7 -2
  187. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByRootFolderContextualMenu.test.js +3 -7
  188. package/src/react-extension/components/Resource/FilterResourcesByGroups/FilterResourcesByGroups.js +1 -1
  189. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.js +1 -1
  190. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.page.js +1 -1
  191. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.stories.js +0 -1
  192. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.js +1 -1
  193. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.data.js +47 -0
  194. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.js +34 -3
  195. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.page.js +46 -9
  196. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.stories.js +0 -1
  197. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsList.js +124 -4
  198. package/src/react-extension/components/Resource/FilterResourcesByText/FilterResourcesByText.test.stories.js +0 -2
  199. package/src/react-extension/components/Resource/ImportResources/ImportResources.js +6 -5
  200. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.js +10 -12
  201. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.stories.js +5 -11
  202. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.js +3 -3
  203. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.js +3 -3
  204. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.stories.js +5 -11
  205. package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.js +1 -1
  206. package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.page.object.js +1 -1
  207. package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.stories.js +8 -14
  208. package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.test.stories.js +5 -11
  209. package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.test.stories.js +8 -14
  210. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.js +9 -8
  211. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.page.js +1 -1
  212. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.stories.js +8 -15
  213. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsActivity.test.stories.js +0 -1
  214. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.js +1 -1
  215. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.test.stories.js +0 -1
  216. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.js +1 -1
  217. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.stories.js +0 -1
  218. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +2 -2
  219. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.page.js +1 -1
  220. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.stories.js +0 -3
  221. package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.stories.js +0 -6
  222. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.stories.js +0 -5
  223. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +1 -1
  224. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.page.js +1 -1
  225. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.stories.js +0 -7
  226. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsActivity.test.stories.js +0 -2
  227. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.stories.js +0 -2
  228. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsPermissions.test.stories.js +0 -2
  229. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.js +150 -0
  230. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.test.stories.js +30 -0
  231. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.js +191 -0
  232. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.test.stories.js +73 -0
  233. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +296 -0
  234. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.test.stories.js +112 -0
  235. package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.test.stories.js +0 -2
  236. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +1 -1
  237. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.page.js +1 -1
  238. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.stories.js +0 -4
  239. package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.js +2 -2
  240. package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.test.page.js +1 -1
  241. package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTagsItemViewer.js +5 -1
  242. package/src/react-extension/components/Share/ShareDialog.test.page.js +1 -1
  243. package/src/react-extension/components/Share/ShareDialog.test.stories.js +12 -10
  244. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.stories.js +5 -9
  245. package/src/react-extension/components/User/CreateUser/CreateUser.js +4 -4
  246. package/src/react-extension/components/User/CreateUser/CreateUser.test.page.js +3 -3
  247. package/src/react-extension/components/User/CreateUser/CreateUser.test.stories.js +3 -1
  248. package/src/react-extension/components/User/DeleteUser/DeleteUser.test.stories.js +5 -8
  249. package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.test.stories.js +5 -8
  250. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +2 -2
  251. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.page.js +1 -1
  252. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.js +35 -2
  253. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.data.js +2 -1
  254. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.js +6 -0
  255. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.page.js +19 -6
  256. package/src/react-extension/components/User/EditUser/EditUser.js +3 -3
  257. package/src/react-extension/components/User/EditUser/EditUser.test.page.js +2 -2
  258. package/src/react-extension/components/User/EditUser/EditUser.test.stories.js +3 -1
  259. package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.js +2 -2
  260. package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.js +1 -1
  261. package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.stories.js +5 -8
  262. package/src/react-extension/components/User/FilterUsersByGroups/FilterUsersByGroup.js +1 -1
  263. package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.js +1 -1
  264. package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.test.stories.js +0 -1
  265. package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.test.stories.js +0 -2
  266. package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.test.stories.js +8 -11
  267. package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.stories.js +8 -11
  268. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.stories.js +8 -12
  269. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +1 -1
  270. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.page.js +2 -2
  271. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.stories.js +5 -8
  272. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.test.stories.js +5 -8
  273. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.test.stories.js +5 -8
  274. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsInformation/DisplayUserGroupDetailsInformation.test.stories.js +8 -11
  275. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.stories.js +8 -11
  276. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +11 -3
  277. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.data.js +7 -0
  278. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +1 -1
  279. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.stories.js +12 -8
  280. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +92 -21
  281. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.data.js +6 -0
  282. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.js +2 -2
  283. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.page.js +1 -1
  284. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DisplayChangePassphraseIntroduction.js +12 -10
  285. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DownloadRecoveryKit.js +4 -10
  286. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +65 -25
  287. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.data.js +6 -0
  288. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +1 -1
  289. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +1 -1
  290. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.js +14 -13
  291. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.stories.js +5 -8
  292. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.js +21 -6
  293. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.test.stories.js +5 -8
  294. package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.js +1 -1
  295. package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.test.stories.js +5 -8
  296. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspace/DisplayUserSettingsWorkspace.js +13 -1
  297. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.js +2 -1
  298. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.test.stories.js +5 -8
  299. package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.test.stories.js +5 -8
  300. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.js +3 -3
  301. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.test.stories.js +5 -8
  302. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.js +26 -4
  303. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.test.stories.js +7 -10
  304. package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.js +749 -0
  305. package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.data.js +32 -0
  306. package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.js +60 -0
  307. package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.page.js +110 -0
  308. package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.js +3 -2
  309. package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.test.stories.js +5 -8
  310. package/src/react-extension/contexts/AdministrationWorkspaceContext.js +2 -2
  311. package/src/react-extension/contexts/ApiAppContext.js +1 -1
  312. package/src/react-extension/contexts/ApiRecoverContext.js +1 -1
  313. package/src/react-extension/contexts/ApiSetupContext.js +1 -1
  314. package/src/react-extension/contexts/AuthenticationContext.js +21 -2
  315. package/src/react-extension/contexts/AuthenticationContext.test.js +40 -0
  316. package/src/react-extension/contexts/DragContext.js +122 -0
  317. package/src/react-extension/contexts/DragContext.test.js +53 -0
  318. package/src/react-extension/contexts/NavigationContext.js +11 -0
  319. package/src/react-extension/contexts/ResourcePasswordGeneratorContext.js +144 -0
  320. package/src/react-extension/contexts/ResourceWorkspaceContext.js +5 -4
  321. package/src/react-extension/contexts/ResourceWorkspaceContext.test.data.js +0 -1
  322. package/src/react-extension/contexts/ResourceWorkspaceContext.test.page.js +0 -1
  323. package/src/react-extension/contexts/UserWorkspaceContext.js +31 -4
  324. package/src/react-extension/contexts/UserWorkspaceContext.test.data.js +17 -287
  325. package/src/react-extension/lib/Crypto/sha512.js +17 -0
  326. package/src/react-extension/test/fixture/Settings/siteSettings.js +6 -0
  327. package/src/react-extension/test/mock/components/Internationalisation/MockTranslationProvider.js +42 -7
  328. package/src/react-quickaccess/ExtQuickAccess.js +75 -28
  329. package/src/react-quickaccess/components/AnimatedSwitch/AnimatedSwitch.js +22 -5
  330. package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgress.js +41 -0
  331. package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgressPage.test.stories.js +23 -0
  332. package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.js +8 -4
  333. package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.test.stories.js +7 -7
  334. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.js +10 -6
  335. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.test.stories.js +9 -5
  336. package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.js +10 -7
  337. package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.test.stories.js +7 -7
  338. package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.js +10 -7
  339. package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.test.stories.js +7 -7
  340. package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.js +10 -7
  341. package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.test.stories.js +7 -7
  342. package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.js +10 -7
  343. package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.test.stories.js +9 -5
  344. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.js +150 -0
  345. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.test.data.js +20 -0
  346. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.test.js +67 -0
  347. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.test.page.js +109 -0
  348. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.js +189 -0
  349. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.test.data.js +40 -0
  350. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.test.js +67 -0
  351. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.test.page.js +121 -0
  352. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +304 -0
  353. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.data.js +102 -0
  354. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.js +76 -0
  355. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.page.js +158 -0
  356. package/src/react-quickaccess/components/Header/Header.js +10 -8
  357. package/src/react-quickaccess/components/Header/Header.test.stories.js +4 -7
  358. package/src/react-quickaccess/components/HomePage/HomePage.js +40 -11
  359. package/src/react-quickaccess/components/HomePage/HomePage.test.stories.js +14 -10
  360. package/src/react-quickaccess/components/HomePage/canSuggestUrl.js +8 -3
  361. package/src/react-quickaccess/components/HomePage/canSuggestUrl.test.js +6 -0
  362. package/src/react-quickaccess/components/LoginPage/LoginPage.js +58 -18
  363. package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +4 -6
  364. package/src/react-quickaccess/components/ManageQuickAccessMode/ManageQuickAccessMode.js +103 -0
  365. package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.js +2 -2
  366. package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.test.stories.js +4 -6
  367. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.js +5 -3
  368. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.stories.js +6 -6
  369. package/src/react-quickaccess/components/PrivateRoute/PrivateRoute.js +1 -0
  370. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +234 -0
  371. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +28 -0
  372. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.stories.js +44 -0
  373. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +166 -39
  374. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.data.js +108 -2
  375. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +28 -25
  376. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.stories.js +6 -6
  377. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +6 -3
  378. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.test.stories.js +5 -3
  379. package/src/react-quickaccess/components/Search/Search.js +13 -1
  380. package/src/react-quickaccess/components/Search/Search.test.stories.js +4 -6
  381. package/src/react-quickaccess/contexts/PrepareResourceContext.js +221 -0
  382. package/src/react-web-integration/AuthLogin/AuthLogin.js +72 -0
  383. package/src/react-web-integration/Autofill/Autofill.js +331 -0
  384. package/src/react-web-integration/BrowserIntegrationBootstrap.js +64 -0
  385. package/src/react-web-integration/Events/Quickaccess/QuickAccessEvent.js +24 -0
  386. package/src/react-web-integration/ExtInFormCallToAction.js +56 -0
  387. package/src/react-web-integration/ExtInFormMenu.js +70 -0
  388. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.js +161 -0
  389. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.data.js +39 -0
  390. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.js +48 -0
  391. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.page.js +42 -0
  392. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.stories.js +91 -0
  393. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.js +360 -0
  394. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.test.stories.js +198 -0
  395. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenuItem.js +103 -0
  396. package/src/react-web-integration/contexts/AppContext.js +39 -0
  397. package/src/react-web-integration/lib/Dom/DomUtils.js +94 -0
  398. package/src/react-web-integration/lib/InForm/InFormCallToActionField.js +263 -0
  399. package/src/react-web-integration/lib/InForm/InFormCredentialsFormField.js +118 -0
  400. package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +77 -0
  401. package/src/react-web-integration/lib/InForm/InFormManager.js +253 -0
  402. package/src/react-web-integration/lib/InForm/InformManager.test.data.js +46 -0
  403. package/src/react-web-integration/lib/InForm/InformManager.test.js +82 -0
  404. package/src/react-web-integration/lib/InForm/InformManager.test.page.js +116 -0
  405. package/src/react-web-integration/lib/InForm/InformMenuField.js +182 -0
  406. package/src/shared/components/Internationalisation/TranslationProvider.js +145 -0
  407. package/src/shared/lib/Browser/detectBrowserName.js +2 -1
  408. package/src/shared/lib/Secret/SecretComplexity.js +2 -2
  409. package/src/shared/lib/SecretGenerator/PassphraseGenerator.js +112 -0
  410. package/src/shared/lib/SecretGenerator/PassphraseGenerator.test.js +48 -0
  411. package/src/shared/lib/SecretGenerator/PassphraseGeneratorWords.js +7789 -0
  412. package/src/shared/lib/SecretGenerator/PasswordGenerator.js +103 -0
  413. package/src/shared/lib/SecretGenerator/SecretGenerator.js +45 -0
  414. package/src/shared/lib/SecretGenerator/SecretGeneratorComplexity.js +190 -0
  415. package/src/shared/lib/SecretGenerator/SecretGeneratorComplexity.test.js +95 -0
  416. package/src/shared/lib/Settings/SiteSettings.js +8 -0
  417. package/src/shared/lib/apiClient/apiClient.test.js +1 -1
  418. package/.babelrc +0 -11
  419. package/.editorconfig +0 -13
  420. package/.eslintrc.json +0 -197
  421. package/.gitlab-ci.yml +0 -28
  422. package/.jest.config.json +0 -6
  423. package/.jest.setup.js +0 -8
  424. package/.jest.transform.js +0 -7
  425. package/.storybook/main.js +0 -15
  426. package/.storybook/preview-body.html +0 -5
  427. package/.storybook/preview.js +0 -6
  428. package/Gruntfile.js +0 -199
  429. package/build/css/themes/default/ext_config_debug.min.css +0 -13
  430. package/build/css/themes/default/ext_legacy.min.css +0 -13
  431. package/build/css/themes/midgar/ext_legacy.min.css +0 -13
  432. package/crowdin.yml +0 -4
  433. package/docker-compose-dev.yml +0 -10
  434. package/jest.config.json +0 -6
  435. package/src/img/controls/colorpicker/marker.png +0 -0
  436. package/src/img/controls/colorpicker/mask.png +0 -0
  437. package/src/img/controls/colorpicker/wheel.png +0 -0
  438. package/src/img/controls/overlay-opacity-50.png +0 -0
  439. package/src/img/third_party/ChromeWebStore_black.png +0 -0
  440. package/src/img/third_party/ChromeWebStore_white.png +0 -0
  441. package/src/js/accordion.js +0 -10
  442. package/src/js/autocomplete.js +0 -241
  443. package/src/js/autocomplete.min.js +0 -3
  444. package/src/js/bootstrap-scrollspy.js +0 -172
  445. package/src/js/chosen.jquery.js +0 -1356
  446. package/src/js/colorpicker.js +0 -32
  447. package/src/js/download.js +0 -128
  448. package/src/js/farbtastic.js +0 -345
  449. package/src/js/swiper.min.js +0 -18
  450. package/src/react-quickaccess/components/Internationalisation/TranslationProvider.js +0 -151
  451. package/storybook-static/favicon.ico +0 -0
  452. package/storybook-static/iframe.html +0 -133
  453. package/storybook-static/index.html +0 -47
  454. package/storybook-static/main.2d01924b12554c6c15af.bundle.js +0 -1
  455. package/storybook-static/main.b0c44c8759149ccf4f67.bundle.js +0 -3
  456. package/storybook-static/main.b0c44c8759149ccf4f67.bundle.js.LICENSE.txt +0 -153
  457. package/storybook-static/main.b0c44c8759149ccf4f67.bundle.js.map +0 -1
  458. package/storybook-static/runtime~main.6a9b04192e3176eff72a.bundle.js +0 -1
  459. package/storybook-static/runtime~main.b0c44c8759149ccf4f67.bundle.js +0 -2
  460. package/storybook-static/runtime~main.b0c44c8759149ccf4f67.bundle.js.map +0 -1
  461. package/storybook-static/static/media/chosen-sprite.6768c197.png +0 -0
  462. package/storybook-static/static/media/chosen-sprite@2x.a0b7f3f1.png +0 -0
  463. package/storybook-static/static/media/dot_black.a2c44078.svg +0 -6
  464. package/storybook-static/static/media/dot_red.7b34541d.svg +0 -6
  465. package/storybook-static/static/media/dot_white.f60f7331.svg +0 -6
  466. package/storybook-static/static/media/fontawesome-webfont.1e59d233.ttf +0 -0
  467. package/storybook-static/static/media/fontawesome-webfont.20fd1704.woff2 +0 -0
  468. package/storybook-static/static/media/fontawesome-webfont.8b43027f.eot +0 -0
  469. package/storybook-static/static/media/fontawesome-webfont.c1e38fd9.svg +0 -2671
  470. package/storybook-static/static/media/fontawesome-webfont.f691f37e.woff +0 -0
  471. package/storybook-static/static/media/infinite-bar.f5327dc3.gif +0 -0
  472. package/storybook-static/static/media/loading_dark.ea474c7f.svg +0 -21
  473. package/storybook-static/static/media/loading_light.061977b5.svg +0 -15
  474. package/storybook-static/static/media/logo.e2b062a5.svg +0 -1
  475. package/storybook-static/static/media/logo_white.cb32e694.svg +0 -1
  476. package/storybook-static/static/media/opensans-bold.a6b4768c.woff +0 -0
  477. package/storybook-static/static/media/opensans-regular.7812bd0b.woff +0 -0
  478. package/storybook-static/static/media/passphrase_intro.37a1ba4e.png +0 -0
  479. package/storybook-static/vendors~main.4abf29e4f956d5befb41.bundle.js +0 -2
  480. package/storybook-static/vendors~main.4abf29e4f956d5befb41.bundle.js.LICENSE.txt +0 -105
  481. package/storybook-static/vendors~main.b0c44c8759149ccf4f67.bundle.js +0 -3
  482. package/storybook-static/vendors~main.b0c44c8759149ccf4f67.bundle.js.LICENSE.txt +0 -145
  483. package/storybook-static/vendors~main.b0c44c8759149ccf4f67.bundle.js.map +0 -1
  484. package/webpack-api.config.js +0 -83
  485. package/webpack-ext.config.js +0 -84
@@ -0,0 +1,32 @@
1
+ import MockPort from "../../../test/mock/MockPort";
2
+
3
+ /**
4
+ * Returns the default app context for the unit test
5
+ * @param appContext An existing app context
6
+ * @returns {any}
7
+ */
8
+ export function defaultAppContext(appContext) {
9
+ const defaultAppContext = {
10
+ port: new MockPort(),
11
+ loggedInUser: {id: 'f848277c-5398-58f8-a82a-72397af2d450'},
12
+ setContext: function(newContext) {
13
+ // In this scope this reference the object context.
14
+ Object.assign(this, newContext);
15
+ },
16
+ };
17
+ return Object.assign(defaultAppContext, appContext || {});
18
+ }
19
+
20
+ /**
21
+ * Default props
22
+ * @returns {object}
23
+ */
24
+ export function defaultProps() {
25
+ const props = {
26
+ userSettingsContext: {
27
+ //onDownloadRecoveryKitRequested: jest.fn(),
28
+ },
29
+ };
30
+
31
+ return props;
32
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.2.0
13
+ */
14
+
15
+ /**
16
+ * Unit tests on TransferToMobile in regard of specifications
17
+ */
18
+ import TransferToMobilePage from "./TransferToMobile.test.page";
19
+ import {defaultAppContext, defaultProps} from "./TransferToMobile.test.data";
20
+
21
+ beforeEach(() => {
22
+ jest.resetModules();
23
+ });
24
+
25
+ describe("As LU I should be able to configure my account on my mobile phone", () => {
26
+ let page; // The page to test against
27
+ const context = defaultAppContext(); // The applicative context
28
+ const props = defaultProps(); // The props to pass
29
+
30
+ describe('As LU I can start the mobile phone account transfer', () => {
31
+ /**
32
+ * Prerequisite:
33
+ * Given I am a logged in user
34
+ * And I am on the transfer to mobile page
35
+ */
36
+ beforeEach(() => {
37
+ page = new TransferToMobilePage(context, props);
38
+ });
39
+
40
+ it('As LU I should be able to start the transfer to mobile', async() => {
41
+ expect(page.exists()).toBeTruthy();
42
+ expect(page.title).toContain('mobile');
43
+ expect(page.isStep('start')).toBe(true);
44
+
45
+ /*
46
+ * await page.clickStart();
47
+ *
48
+ * let expectedData = context.user.id;
49
+ * let expectedParameters = ['passbolt.keyring.get-public-key-info-by-user', expectedData];
50
+ * expect(context.port.request).toHaveBeenCalledWith(...expectedParameters);
51
+ */
52
+
53
+ /*
54
+ * expectedData = {folder_parent_id: "some folder parent id", name: "My super folder"};
55
+ * expectedParameters = ['passbolt.mobile.transfer.create', expectedData];
56
+ * expect(context.port.request).toHaveBeenCalledWith(...expectedParameters);
57
+ */
58
+ });
59
+ });
60
+ });
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.2.0
13
+ */
14
+ import {fireEvent, render, waitFor} from "@testing-library/react";
15
+ import React from "react";
16
+ import AppContext from "../../../contexts/AppContext";
17
+ import TransferToMobile from "./TransferToMobile";
18
+ import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
19
+
20
+ /**
21
+ * The TransferToMobile component represented as a page
22
+ */
23
+ export default class TransferToMobileTestPage {
24
+ /**
25
+ * Default constructor
26
+ * @param appContext An app context
27
+ * @param props Props to attach
28
+ */
29
+ constructor(appContext, props) {
30
+ this._page = render(
31
+ <MockTranslationProvider>
32
+ <AppContext.Provider value={appContext}>
33
+ <TransferToMobile {...props}/>
34
+ </AppContext.Provider>
35
+ </MockTranslationProvider>
36
+ );
37
+ }
38
+
39
+ /**
40
+ * Returns the user confirm passphrase element
41
+ */
42
+ get transferToMobile() {
43
+ return this._page.container.querySelector('.profile-mobile-transfer');
44
+ }
45
+
46
+ /**
47
+ * Returns the title element
48
+ */
49
+ get title() {
50
+ return this._page.container.querySelector('.profile-mobile-transfer h3').textContent;
51
+ }
52
+
53
+ /**
54
+ * Start button
55
+ */
56
+ get startButton() {
57
+ return this._page.container.querySelector('.profile-mobile-transfer .mobile-transfer-step-start a.button');
58
+ }
59
+
60
+ /**
61
+ * Cancel button
62
+ */
63
+ get cancelButton() {
64
+ return this._page.container.querySelector('.profile-mobile-transfer a.cancel.button');
65
+ }
66
+
67
+ /**
68
+ * Check current step
69
+ * @param {string} step
70
+ * @returns {boolean}
71
+ */
72
+ isStep(step) {
73
+ switch (step) {
74
+ case 'start':
75
+ return this._page.container.querySelector('.profile-mobile-transfer .mobile-transfer-step-start') !== null;
76
+ case 'in progress':
77
+ return this._page.container.querySelector('.profile-mobile-transfer .mobile-transfer-step-in-progress') !== null;
78
+ case 'cancel':
79
+ return this._page.container.querySelector('.profile-mobile-transfer .mobile-transfer-step-cancel') !== null;
80
+ case 'complete':
81
+ return this._page.container.querySelector('.profile-mobile-transfer .mobile-transfer-step-complete') !== null;
82
+ default:
83
+ throw new Error('Unknown step in TransferToMobile test page.');
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Returns true if the page object exists in the container
89
+ */
90
+ exists() {
91
+ return this.transferToMobile !== null;
92
+ }
93
+
94
+ /** Click on the element */
95
+ async click(element) {
96
+ const leftClick = {button: 0};
97
+ fireEvent.click(element, leftClick);
98
+ await waitFor(() => {});
99
+ }
100
+
101
+ /** click start transfer */
102
+ async clickStart() {
103
+ await this.click(this.startButton);
104
+ }
105
+
106
+ /** click cancel */
107
+ async clickCancel() {
108
+ await this.click(this.cancelButton);
109
+ }
110
+ }
@@ -335,11 +335,12 @@ class UploadUserProfileAvatar extends React.Component {
335
335
  id="dialog-upload-avatar-input"
336
336
  className={`button primary ${this.areActionsAllowed ? "" : "disabled"}`}
337
337
  onClick={this.handleSelectFile}>
338
- <Icon name="upload-a"/> <Trans>Choose a file</Trans>
338
+ <Icon name="upload-a"/>
339
+ <span className='ellipsis'><Trans>Choose a file</Trans></span>
339
340
  </a>
340
341
  </div>
341
342
  {this.state.errors.message &&
342
- <div className="error message">{this.state.errors.message}</div>
343
+ <div className="error-message">{this.state.errors.message}</div>
343
344
  }
344
345
  </div>
345
346
  </div>
@@ -2,7 +2,6 @@ import {MemoryRouter, Route} from "react-router-dom";
2
2
  import React from "react";
3
3
  import AppContext from "../../../contexts/AppContext";
4
4
  import PropTypes from "prop-types";
5
- import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
6
5
  import UploadUserProfileAvatar from "./UploadUserProfileAvatar";
7
6
 
8
7
 
@@ -47,13 +46,11 @@ const context = {
47
46
 
48
47
 
49
48
  const Template = args =>
50
- <MockTranslationProvider>
51
- <AppContext.Provider value={context}>
52
- <MemoryRouter initialEntries={['/']}>
53
- <Route component={routerProps => <UploadUserProfileAvatar {...args} {...routerProps}/>}></Route>
54
- </MemoryRouter>
55
- </AppContext.Provider>
56
- </MockTranslationProvider>;
49
+ <AppContext.Provider value={context}>
50
+ <MemoryRouter initialEntries={['/']}>
51
+ <Route component={routerProps => <UploadUserProfileAvatar {...args} {...routerProps}/>}></Route>
52
+ </MemoryRouter>
53
+ </AppContext.Provider>;
57
54
 
58
55
  Template.propTypes = {
59
56
  context: PropTypes.object,
@@ -322,9 +322,9 @@ class AdministrationWorkspaceContextProvider extends React.Component {
322
322
  * @return {Promise<object>}
323
323
  */
324
324
  async onGetSynchronizeUsersDirectoryRequested() {
325
- const apiClientOptions = this.props.context.getApiClientOptions().setResourceName("directorysync");
325
+ const apiClientOptions = this.props.context.getApiClientOptions().setResourceName("directorysync/synchronize");
326
326
  const apiClient = new ApiClient(apiClientOptions);
327
- return apiClient.get("synchronize");
327
+ return apiClient.create({});
328
328
  }
329
329
 
330
330
  /**
@@ -207,7 +207,7 @@ class ApiAppContextProvider extends React.Component {
207
207
  return true;
208
208
  } catch (error) {
209
209
  if (error instanceof PassboltApiFetchError) {
210
- if (error.data.code === 403) {
210
+ if (error.data.code === 401) {
211
211
  return false;
212
212
  }
213
213
  }
@@ -102,7 +102,7 @@ class ApiRecoverContextProvider extends React.Component {
102
102
  */
103
103
  isBrowserSupported() {
104
104
  const browserName = detectBrowserName();
105
- const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX];
105
+ const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX, BROWSER_NAMES.EDGE];
106
106
  return supportedBrowserNames.includes(browserName);
107
107
  }
108
108
 
@@ -102,7 +102,7 @@ class ApiSetupContextProvider extends React.Component {
102
102
  */
103
103
  isBrowserSupported() {
104
104
  const browserName = detectBrowserName();
105
- const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX];
105
+ const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX, BROWSER_NAMES.EDGE];
106
106
  return supportedBrowserNames.includes(browserName);
107
107
  }
108
108
 
@@ -15,6 +15,7 @@ import React from "react";
15
15
  import PropTypes from "prop-types";
16
16
  import UserSettings from "../../shared/lib/Settings/UserSettings";
17
17
  import {withAppContext} from "./AppContext";
18
+ import {BROWSER_NAMES, detectBrowserName} from "../../shared/lib/Browser/detectBrowserName";
18
19
 
19
20
  export const AuthenticationContext = React.createContext({
20
21
  port: null, // The contextual port
@@ -60,6 +61,8 @@ export const AuthenticationContext = React.createContext({
60
61
  }, // Whenever the check of server key is requested
61
62
  onGetServerKeyRequested: () => {
62
63
  }, // Whenever the server key is requested.
64
+ onCompleteIntroduceSetupExtension: () => {
65
+ }, // Whenever the setup extension is completed.
63
66
  onUnexpectedError: () => {
64
67
  }, // Whenever an unexpected error occurred.
65
68
  });
@@ -103,6 +106,7 @@ export class AuthenticationContextProvider extends React.Component {
103
106
  onVerifyServerKeyRequested: this.onVerifyServerKeyRequested.bind(this),
104
107
  onGetServerKeyRequested: this.onGetServerKeyRequested.bind(this),
105
108
  onTryLoginAgainRequested: this.onTryLoginAgainRequested.bind(this),
109
+ onCompleteIntroduceSetupExtension: this.onCompleteIntroduceSetupExtension.bind(this),
106
110
  onUnexpectedError: this.onUnexpectedError.bind(this),
107
111
  };
108
112
  }
@@ -111,12 +115,14 @@ export class AuthenticationContextProvider extends React.Component {
111
115
  * Initialize the authentication setup
112
116
  */
113
117
  async onInitializeSetupRequested() {
118
+ const isFirstInstall = await this.state.port.request('passbolt.setup.is-first-install');
119
+ const isChromeBrowser = detectBrowserName() === BROWSER_NAMES.CHROME;
114
120
  const setupInfo = await this.state.port.request('passbolt.setup.info');
115
121
  // update the locale to use the user locale
116
122
  this.props.context.onRefreshLocaleRequested(setupInfo.locale);
117
123
  // In case of error the background page should just disconnect the extension setup application.
118
124
  await this.setState({
119
- state: AuthenticationContextState.SETUP_INITIALIZED,
125
+ state: isFirstInstall && isChromeBrowser ? AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_INITIALIZED : AuthenticationContextState.SETUP_INITIALIZED,
120
126
  setupInfo,
121
127
  process: AuthenticationContextProcess.SETUP
122
128
  });
@@ -127,12 +133,14 @@ export class AuthenticationContextProvider extends React.Component {
127
133
  * Initialize the authentication recover
128
134
  */
129
135
  async onInitializeRecoverRequested() {
136
+ const isFirstInstall = await this.state.port.request('passbolt.recover.first-install');
137
+ const isChromeBrowser = detectBrowserName() === BROWSER_NAMES.CHROME;
130
138
  const recoverInfo = await this.state.port.request('passbolt.recover.info');
131
139
  // The user might have already set a locale, the recover info update the background page locale, refresh the locale.
132
140
  this.props.context.onRefreshLocaleRequested(recoverInfo.locale);
133
141
  // In case of error the background page should just disconnect the extension setup application.
134
142
  await this.setState({
135
- state: AuthenticationContextState.RECOVER_INITIALIZED,
143
+ state: isFirstInstall && isChromeBrowser ? AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_INITIALIZED : AuthenticationContextState.RECOVER_INITIALIZED,
136
144
  recoverInfo,
137
145
  process: AuthenticationContextProcess.RECOVER
138
146
  });
@@ -194,6 +202,15 @@ export class AuthenticationContextProvider extends React.Component {
194
202
  await this.setState({state, error});
195
203
  }
196
204
 
205
+ /**
206
+ * Whenever a setup extension is required for first install
207
+ * @returns {Promise<void>}
208
+ */
209
+ async onCompleteIntroduceSetupExtension() {
210
+ const state = AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_COMPLETED;
211
+ await this.setState({state});
212
+ }
213
+
197
214
  /**
198
215
  * Whenever the generates of a gpgp key given an user passphrase is requested
199
216
  * @param passphrase A passphrase
@@ -424,6 +441,8 @@ export const AuthenticationContextProcess = {
424
441
  */
425
442
  export const AuthenticationContextState = {
426
443
  INITIAL_STATE: 'Initial State',
444
+ INTRODUCE_SETUP_EXTENSION_INITIALIZED: 'Introduce Setup Extension Initialized',
445
+ INTRODUCE_SETUP_EXTENSION_COMPLETED: 'Introduce Setup Extension Completed',
427
446
  SETUP_INITIALIZED: 'Setup Initialized',
428
447
  RECOVER_INITIALIZED: 'Recover Initialized',
429
448
  SETUP_COMPLETED: 'Setup Completed',
@@ -14,10 +14,12 @@
14
14
 
15
15
  import {defaultProps} from "./AuthenticationContext.test.data";
16
16
  import {AuthenticationContextProvider, AuthenticationContextState} from "./AuthenticationContext";
17
+ import {clear, mockUserAgent} from 'jest-useragent-mock';
17
18
 
18
19
  beforeEach(() => {
19
20
  jest.resetModules();
20
21
  jest.clearAllMocks();
22
+ clear();
21
23
  });
22
24
 
23
25
  describe("Authentication Context", () => {
@@ -42,14 +44,33 @@ describe("Authentication Context", () => {
42
44
  locale: "fr-FR"
43
45
  };
44
46
  const requestSetupInfoMock = jest.fn(() => setupInfo);
47
+ jest.spyOn(authenticationContext.state.port, 'request').mockImplementationOnce(jest.fn(() => false));
45
48
  jest.spyOn(authenticationContext.state.port, 'request').mockImplementation(requestSetupInfoMock);
46
49
  await authenticationContext.onInitializeSetupRequested();
50
+ expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.setup.is-first-install");
47
51
  expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.setup.info");
48
52
  expect(authenticationContext.props.context.onRefreshLocaleRequested).toHaveBeenCalledWith(setupInfo.locale);
49
53
  expect(authenticationContext.state.state).toBe(AuthenticationContextState.SETUP_INITIALIZED);
50
54
  expect(authenticationContext.state.process).toBe('setup');
51
55
  });
52
56
 
57
+ it('As AN I should start initially with the INTRODUCE_SETUP_EXTENSION_INITIALIZED state when on chrome with a plugin just installed', async() => {
58
+ mockUserAgent('chrome');
59
+ const setupInfo = {
60
+ locale: "fr-FR"
61
+ };
62
+ const requestSetupInfoMock = jest.fn(() => setupInfo);
63
+ jest.spyOn(authenticationContext.state.port, 'request').mockImplementation(requestSetupInfoMock);
64
+ await authenticationContext.onInitializeSetupRequested();
65
+ expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.setup.is-first-install");
66
+ expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.setup.info");
67
+ expect(authenticationContext.props.context.onRefreshLocaleRequested).toHaveBeenCalledWith(setupInfo.locale);
68
+ expect(authenticationContext.state.state).toBe(AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_INITIALIZED);
69
+ await authenticationContext.onCompleteIntroduceSetupExtension();
70
+ expect(authenticationContext.state.state).toBe(AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_COMPLETED);
71
+ expect(authenticationContext.state.process).toBe('setup');
72
+ });
73
+
53
74
  it('As AN I should request to generate a private key', async() => {
54
75
  const passphrase = 'some passphrase';
55
76
  await authenticationContext.onGenerateGpgKeyRequested(passphrase);
@@ -146,14 +167,33 @@ describe("Authentication Context", () => {
146
167
  locale: "fr-FR"
147
168
  };
148
169
  const requestRecoverInfoMock = jest.fn(() => recoverInfo);
170
+ jest.spyOn(authenticationContext.state.port, 'request').mockImplementationOnce(jest.fn(() => false));
149
171
  jest.spyOn(authenticationContext.state.port, 'request').mockImplementation(requestRecoverInfoMock);
150
172
  await authenticationContext.onInitializeRecoverRequested();
151
173
  expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.recover.info");
174
+ expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.recover.first-install");
152
175
  expect(authenticationContext.props.context.onRefreshLocaleRequested).toHaveBeenCalledWith(recoverInfo.locale);
153
176
  expect(authenticationContext.state.state).toBe(AuthenticationContextState.RECOVER_INITIALIZED);
154
177
  expect(authenticationContext.state.process).toBe('recover');
155
178
  });
156
179
 
180
+ it('As AN I should start initially with the INTRODUCE_SETUP_EXTENSION_INITIALIZED state when on chrome with a plugin just installed', async() => {
181
+ mockUserAgent('chrome');
182
+ const recoverInfo = {
183
+ locale: "fr-FR"
184
+ };
185
+ const requestRecoverInfoMock = jest.fn(() => recoverInfo);
186
+ jest.spyOn(authenticationContext.state.port, 'request').mockImplementation(requestRecoverInfoMock);
187
+ await authenticationContext.onInitializeRecoverRequested();
188
+ expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.recover.info");
189
+ expect(authenticationContext.state.port.request).toHaveBeenCalledWith("passbolt.recover.first-install");
190
+ expect(authenticationContext.props.context.onRefreshLocaleRequested).toHaveBeenCalledWith(recoverInfo.locale);
191
+ expect(authenticationContext.state.state).toBe(AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_INITIALIZED);
192
+ await authenticationContext.onCompleteIntroduceSetupExtension();
193
+ expect(authenticationContext.state.state).toBe(AuthenticationContextState.INTRODUCE_SETUP_EXTENSION_COMPLETED);
194
+ expect(authenticationContext.state.process).toBe('recover');
195
+ });
196
+
157
197
  it('As AN I should import a gpg key ', async() => {
158
198
  const recoverInfo = {
159
199
  locale: "fr-FR"
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.4.0
13
+ */
14
+
15
+ import React from "react";
16
+ import PropTypes from "prop-types";
17
+
18
+ /**
19
+ * The drag and drop context
20
+ */
21
+ export const DragContext = React.createContext({
22
+ dragAndDrops: null, // The current component displayed for drag and drop
23
+ dragging: false, // The user dragging or not items
24
+ draggedItems: null, // the dragged items
25
+ onDragStart: () => {}, // on drag start
26
+ onDragEnd: () => {}, // on drag end
27
+ });
28
+
29
+ /**
30
+ * The related context provider
31
+ */
32
+ export default class dragContextProvider extends React.Component {
33
+ /**
34
+ * Default constructor
35
+ * @param props The component props
36
+ */
37
+ constructor(props) {
38
+ super(props);
39
+ this.state = this.defaultState;
40
+ this.createRefs();
41
+ }
42
+
43
+ /**
44
+ * Create DOM nodes or React elements references in order to be able to access them programmatically.
45
+ */
46
+ createRefs() {
47
+ this.elementRef = React.createRef();
48
+ }
49
+
50
+ /**
51
+ * Returns the default component state
52
+ */
53
+ get defaultState() {
54
+ return {
55
+ displayDraggedItemsComponent: [],
56
+ dragging: false,
57
+ draggedItems: null,
58
+ onDragStart: this.handleDragStart.bind(this),
59
+ onDragEnd: this.handleDragEnd.bind(this),
60
+ };
61
+ }
62
+
63
+ /**
64
+ * Handle drag start
65
+ * @param event
66
+ * @param draggedItemComponent
67
+ * @param draggedItems
68
+ */
69
+ async handleDragStart(event, draggedItemComponent, draggedItems) {
70
+ await this.setState({displayDraggedItemsComponent: [{draggedItemComponent}], dragging: true, draggedItems});
71
+ event.dataTransfer.setDragImage(this.elementRef.current, 5, 5);
72
+ }
73
+
74
+ /**
75
+ * Handle drag end
76
+ */
77
+ async handleDragEnd() {
78
+ await this.setState({displayDraggedItemsComponent: [], dragging: false, draggedItems: null});
79
+ }
80
+
81
+ /**
82
+ * Render the component
83
+ * @returns {JSX}
84
+ */
85
+ render() {
86
+ return (
87
+ <DragContext.Provider value={this.state}>
88
+ <div ref={this.elementRef}>
89
+ {this.state.displayDraggedItemsComponent.map((displayDraggedItemComponent, index) =>
90
+ <displayDraggedItemComponent.draggedItemComponent
91
+ key={index}/>
92
+ )
93
+ }
94
+ </div>
95
+ {this.props.children}
96
+ </DragContext.Provider>
97
+ );
98
+ }
99
+ }
100
+
101
+ dragContextProvider.displayName = 'dragContextProvider';
102
+ dragContextProvider.propTypes = {
103
+ children: PropTypes.any
104
+ };
105
+
106
+ /**
107
+ * Contextual Menu Context Consumer HOC
108
+ * @param WrappedComponent
109
+ */
110
+ export function withDrag(WrappedComponent) {
111
+ return class withDrag extends React.Component {
112
+ render() {
113
+ return (
114
+ <DragContext.Consumer>
115
+ {
116
+ dragContext => <WrappedComponent dragContext={dragContext} {...this.props} />
117
+ }
118
+ </DragContext.Consumer>
119
+ );
120
+ }
121
+ };
122
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.1.0
13
+ */
14
+
15
+ import DragContextProvider from "./DragContext";
16
+
17
+ beforeEach(() => {
18
+ jest.resetModules();
19
+ jest.clearAllMocks();
20
+ });
21
+
22
+ describe("Drag Context", () => {
23
+ let dragContext; // The context to text
24
+
25
+ describe('As LU I should be able to drag', () => {
26
+ beforeEach(() => {
27
+ dragContext = new DragContextProvider();
28
+ const setStateMock = state => dragContext.state = Object.assign(dragContext.state, state);
29
+ jest.spyOn(dragContext, 'setState').mockImplementation(setStateMock);
30
+ });
31
+
32
+ it('As LU I should start dragging', async() => {
33
+ const event = {
34
+ dataTransfer: {
35
+ setDragImage: jest.fn()
36
+ }
37
+ };
38
+ const component = jest.fn();
39
+ const draggedItems = {
40
+ item: "item"
41
+ };
42
+ await dragContext.state.onDragStart(event, component, draggedItems);
43
+ expect(dragContext.state.dragging).toBeTruthy();
44
+ expect(dragContext.state.draggedItems).toBe(draggedItems);
45
+ });
46
+
47
+ it('As LU I should end the dragging', async() => {
48
+ await dragContext.state.onDragEnd();
49
+ expect(dragContext.state.dragging).toBeFalsy();
50
+ expect(dragContext.state.draggedItems).toBe(null);
51
+ });
52
+ });
53
+ });
@@ -50,6 +50,8 @@ export const NavigationContext = React.createContext({
50
50
  }, // Whenever the user wants to navigate to the users settings workspace mfa section.
51
51
  onGoToUserSettingsKeysRequested: () => {
52
52
  }, // Whenever the user wants to navigate to the users settings workspace keys section.
53
+ onGoToUserSettingsMobileRequested: () => {
54
+ }, // Whenever the user wants to navigate to the users settings workspace mobile section.
53
55
  onGoToNewTab: () => {
54
56
  }, // Whenever the user want to navigate to a new url.
55
57
  });
@@ -92,6 +94,7 @@ class NavigationContextProvider extends React.Component {
92
94
  onGoToUserSettingsThemeRequested: this.onGoToUserSettingsThemeRequested.bind(this), // Whenever the user wants to navigate to the users settings workspace theme section.
93
95
  onGoToUserSettingsMfaRequested: this.onGoToUserSettingsMfaRequested.bind(this), // Whenever the user wants to navigate to the users settings workspace mfa section.
94
96
  onGoToUserSettingsKeysRequested: this.onGoToUserSettingsKeysRequested.bind(this), // Whenever the user wants to navigate to the users settings workspace keys section.
97
+ onGoToUserSettingsMobileRequested: this.onGoToUserSettingsMobileRequested.bind(this), // Whenever the user wants to navigate to the users settings workspace mobile section.
95
98
  };
96
99
  }
97
100
 
@@ -279,6 +282,14 @@ class NavigationContextProvider extends React.Component {
279
282
  await this.goTo("browser-extension", "/app/settings/keys");
280
283
  }
281
284
 
285
+ /**
286
+ * Whenever the user wants to navigate to the users settings workspace keys section.
287
+ * @returns {Promise<void>}
288
+ */
289
+ async onGoToUserSettingsMobileRequested() {
290
+ await this.goTo("browser-extension", "/app/settings/mobile");
291
+ }
292
+
282
293
  /**
283
294
  * Render the component
284
295
  * @returns {JSX}