passbolt-styleguide 3.6.2 → 3.7.0-alpha1

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 (431) hide show
  1. package/README.md +9 -6
  2. package/build/css/help.min.css +3 -7
  3. package/build/css/public.min.css +3 -16
  4. package/build/css/themes/default/api_authentication.min.css +3 -3
  5. package/build/css/themes/default/api_cloud.min.css +3 -3
  6. package/build/css/themes/default/api_main.min.css +3 -12
  7. package/build/css/themes/default/api_reports.min.css +3 -12
  8. package/build/css/themes/default/api_webinstaller.min.css +3 -12
  9. package/build/css/themes/default/ext_app.min.css +3 -12
  10. package/build/css/themes/default/ext_authentication.min.css +3 -3
  11. package/build/css/themes/default/ext_external.min.css +2 -2
  12. package/build/css/themes/default/ext_in_form_cta.min.css +3 -3
  13. package/build/css/themes/default/ext_in_form_menu.min.css +3 -3
  14. package/build/css/themes/default/ext_quickaccess.min.css +3 -3
  15. package/build/css/themes/midgar/api_authentication.min.css +3 -3
  16. package/build/css/themes/midgar/api_main.min.css +3 -12
  17. package/build/css/themes/midgar/api_reports.min.css +3 -12
  18. package/build/css/themes/midgar/ext_app.min.css +3 -12
  19. package/build/css/themes/midgar/ext_authentication.min.css +3 -3
  20. package/build/css/themes/midgar/ext_in_form_cta.min.css +3 -3
  21. package/build/css/themes/midgar/ext_in_form_menu.min.css +3 -3
  22. package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
  23. package/build/js/dist/api-account-recovery.js +1 -1
  24. package/build/js/dist/api-app.js +1 -1
  25. package/build/js/dist/api-app.js.LICENSE.txt +25 -1
  26. package/build/js/dist/api-recover.js +1 -1
  27. package/build/js/dist/api-setup.js +1 -1
  28. package/build/js/dist/api-triage.js +1 -1
  29. package/build/js/dist/api-vendors.js +1 -1
  30. package/build/js/dist/api-vendors.js.LICENSE.txt +43 -7
  31. package/i18next-parser.config.js +22 -0
  32. package/package.json +8 -5
  33. package/src/img/og/og_image.png +0 -0
  34. package/src/locales/de-DE/common.json +308 -173
  35. package/src/locales/en-UK/common.json +155 -175
  36. package/src/locales/es-ES/common.json +955 -0
  37. package/src/locales/fr-FR/common.json +308 -174
  38. package/src/locales/ja-JP/common.json +292 -172
  39. package/src/locales/lt-LT/common.json +985 -0
  40. package/src/locales/nl-NL/common.json +329 -194
  41. package/src/locales/pl-PL/common.json +337 -172
  42. package/src/locales/sv-SE/common.json +307 -172
  43. package/src/public-website-sign-in/PublicWebsiteSignInBootstrap.js +25 -0
  44. package/src/public-website-sign-in/lib/SignIn/SignInManager.js +85 -0
  45. package/src/public-website-sign-in/lib/SignIn/SignInManager.test.data.js +45 -0
  46. package/src/public-website-sign-in/lib/SignIn/SignInManager.test.js +59 -0
  47. package/src/public-website-sign-in/lib/SignIn/SignInManager.test.page.js +67 -0
  48. package/src/react-extension/ExtBootstrapAccountRecovery.js +17 -0
  49. package/src/react-extension/ExtBootstrapApp.js +17 -0
  50. package/src/react-extension/ExtBootstrapLogin.js +17 -0
  51. package/src/react-extension/ExtBootstrapRecover.js +17 -0
  52. package/src/react-extension/ExtBootstrapSetup.js +17 -0
  53. package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.stories.js +1 -1
  54. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.js +1 -9
  55. package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.js +1 -9
  56. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.js +1 -1
  57. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.stories.js +1 -1
  58. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.js +1 -1
  59. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.stories.js +1 -1
  60. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.js +6 -3
  61. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.data.js +10 -7
  62. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.stories.js +1 -1
  63. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +2 -15
  64. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.js +2 -12
  65. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.js +2 -11
  66. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +1 -1
  67. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +1 -1
  68. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +1 -9
  69. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.stories.js +1 -1
  70. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +1 -9
  71. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.page.js +1 -1
  72. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.stories.js +12 -6
  73. package/src/react-extension/components/Administration/DisplayLoadingDialog/DisplayLoadingDialog.js +2 -11
  74. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +6 -6
  75. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +1 -1
  76. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +25 -1
  77. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +1 -1
  78. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +1 -1
  79. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.stories.js +1 -1
  80. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +25 -1
  81. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +1 -1
  82. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.stories.js +1 -1
  83. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.js +12 -2
  84. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.js +1 -1
  85. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.stories.js +1 -1
  86. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +24 -24
  87. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +1 -1
  88. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +1 -1
  89. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.test.stories.js +1 -1
  90. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.js +6 -3
  91. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.data.js +20 -5
  92. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.stories.js +1 -1
  93. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.js +1 -11
  94. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.stories.js +1 -1
  95. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.js +1 -9
  96. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.test.stories.js +1 -1
  97. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.js +90 -46
  98. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.test.js +61 -17
  99. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/ImportOrganizationKey.js +1 -1
  100. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.js +1 -9
  101. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.page.js +14 -0
  102. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.stories.js +1 -1
  103. package/src/react-extension/components/Announcement/AnnouncementWrapper/AnnouncementWrapper.js +3 -2
  104. package/src/react-extension/components/Announcement/HandleSubscriptionAnnouncement/DisplayExpiredSubscriptionAnnouncement.js +3 -3
  105. package/src/react-extension/components/Announcement/HandleSubscriptionAnnouncement/DisplayGoingToExpireSubscriptionAnnouncement.js +3 -2
  106. package/src/react-extension/components/Announcement/HandleSubscriptionAnnouncement/DisplayInvalidSubscriptionAnnouncement.js +3 -3
  107. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.js +2 -2
  108. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.stories.js +1 -1
  109. package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.js +2 -2
  110. package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.test.stories.js +1 -1
  111. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.js +2 -12
  112. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailbox.test.stories.js +1 -1
  113. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +88 -41
  114. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.stories.js +1 -1
  115. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.js +2 -2
  116. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.stories.js +11 -1
  117. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.js +2 -2
  118. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.stories.js +1 -1
  119. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +24 -14
  120. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.js +2 -2
  121. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.stories.js +1 -1
  122. package/src/react-extension/components/Authentication/DisplayAlreadyLoggedInError/DisplayAlreadyLoggedInError.js +2 -2
  123. package/src/react-extension/components/Authentication/DisplayAlreadyLoggedInError/DisplayAlreadyLoggedInError.test.stories.js +1 -1
  124. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.js +2 -2
  125. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.stories.js +1 -1
  126. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.js +2 -2
  127. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +1 -1
  128. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.js +2 -2
  129. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.stories.js +1 -1
  130. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.js +3 -3
  131. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.stories.js +1 -1
  132. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.js +2 -2
  133. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.stories.js +1 -1
  134. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.js +6 -6
  135. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.stories.js +1 -1
  136. package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.js +1 -1
  137. package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.stories.js +1 -1
  138. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.js +34 -7
  139. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.data.js +2 -1
  140. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.js +20 -1
  141. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.page.js +4 -0
  142. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.stories.js +1 -1
  143. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +2 -2
  144. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.stories.js +4 -1
  145. package/src/react-extension/components/Authentication/IntroduceExtension/IntroduceExtension.js +2 -2
  146. package/src/react-extension/components/Authentication/IntroduceExtension/IntroduceExtension.test.stories.js +1 -1
  147. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.js +1 -9
  148. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.stories.js +1 -1
  149. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.js +2 -2
  150. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.stories.js +6 -1
  151. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.js +2 -2
  152. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +1 -1
  153. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.js +2 -2
  154. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.test.stories.js +1 -1
  155. package/src/react-extension/components/AuthenticationAccountRecovery/OrchestrateAccountRecovery/OrchestrateAccountRecovery.js +2 -2
  156. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.js +2 -2
  157. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.stories.js +1 -1
  158. package/src/react-extension/components/AuthenticationLogin/Login/Login.js +1 -9
  159. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.stories.js +1 -1
  160. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxFooter.js +2 -2
  161. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain.js +2 -2
  162. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.js +1 -1
  163. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.stories.js +1 -1
  164. package/src/react-extension/components/AuthenticationRecover/RecoverAuthentication/RecoverAuthentication.js +3 -2
  165. package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +3 -3
  166. package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.stories.js +1 -1
  167. package/src/react-extension/components/Common/ActionFeedback/ShareActionFeedback.js +2 -2
  168. package/src/react-extension/components/Common/Autocomplete/Autocomplete.js +8 -2
  169. package/src/react-extension/components/Common/Avatar/UserAvatar.test.data.js +6 -4
  170. package/src/react-extension/components/Common/Avatar/UserAvatar.test.stories.js +3 -2
  171. package/src/react-extension/components/Common/Button/Button.test.stories.js +5 -5
  172. package/src/react-extension/components/Common/Checkbox/Checkbox.test.stories.js +1 -1
  173. package/src/react-extension/components/Common/ContextualMenu/ContextualMenu.test.stories.js +1 -1
  174. package/src/react-extension/components/Common/ContextualMenu/ContextualMenuWrapper.js +10 -8
  175. package/src/react-extension/components/Common/Dialog/DialogCloseButton/DialogCloseButton.js +2 -1
  176. package/src/react-extension/components/Common/Dialog/DialogWrapper/DialogFooter.test.stories.js +2 -2
  177. package/src/react-extension/components/Common/Dialog/DialogWrapper/DialogWrapper.js +2 -2
  178. package/src/react-extension/components/Common/Dialog/DialogWrapper/DialogWrapper.test.stories.js +1 -1
  179. package/src/react-extension/components/Common/DragInfo/DragInfo.test.stories.js +10 -8
  180. package/src/react-extension/components/Common/Error/NotifyError/NotifyError.js +3 -11
  181. package/src/react-extension/components/Common/Error/NotifyError/NotifyError.test.stories.js +6 -1
  182. package/src/react-extension/components/Common/Footer/Footer.js +3 -13
  183. package/src/react-extension/components/Common/Inputs/Autocomplete/Autocomplete.js +16 -7
  184. package/src/react-extension/components/Common/Inputs/Autocomplete/AutocompleteItemLoading.js +4 -0
  185. package/src/react-extension/components/Common/Inputs/FormSubmitButton/FormCancelButton.js +3 -12
  186. package/src/react-extension/components/Common/Inputs/FormSubmitButton/FormSubmitButton.js +2 -2
  187. package/src/react-extension/components/Common/Internationalisation/TranslationProvider.js +0 -1
  188. package/src/react-extension/components/Common/Link/Link.test.stories.js +1 -1
  189. package/src/react-extension/components/Common/Loading/LoadingBar/LoadingBar.test.stories.js +1 -1
  190. package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.test.stories.js +1 -1
  191. package/src/react-extension/components/Common/Menu/DisplayMainMenu.js +2 -11
  192. package/src/react-extension/components/Common/Navigation/Search/SearchBar.js +7 -7
  193. package/src/react-extension/components/Common/Navigation/Search/SearchBar.test.stories.js +1 -1
  194. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.js +2 -11
  195. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.stories.js +1 -1
  196. package/src/react-extension/components/Common/RadioButton/RadioButton.test.stories.js +1 -1
  197. package/src/react-extension/components/Common/Select/Select.js +44 -12
  198. package/src/react-extension/components/Common/Select/Select.test.stories.js +1 -1
  199. package/src/react-extension/components/Common/Text/Text.test.stories.js +1 -1
  200. package/src/react-extension/components/Common/TextField/TextField.test.stories.js +1 -1
  201. package/src/react-extension/components/Common/Toggle/Toggle.test.stories.js +1 -1
  202. package/src/react-extension/components/Common/Tooltip/Tooltip.test.stories.js +2 -2
  203. package/src/react-extension/components/Internationalisation/ChangeLocale/ChangeLocale.test.page.js +1 -1
  204. package/src/react-extension/components/Resource/CreateResource/CreateResource.js +9 -9
  205. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.stories.js +1 -1
  206. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.js +3 -3
  207. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.test.page.js +1 -1
  208. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.test.stories.js +1 -1
  209. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +4 -4
  210. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.test.stories.js +1 -1
  211. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspace.js +1 -9
  212. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMainMenu.js +8 -17
  213. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMainMenu.test.js +2 -2
  214. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMainMenu.test.stories.js +1 -1
  215. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +6 -6
  216. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.test.stories.js +1 -1
  217. package/src/react-extension/components/Resource/EditResource/EditResource.js +8 -8
  218. package/src/react-extension/components/Resource/EditResource/EditResource.test.stories.js +1 -1
  219. package/src/react-extension/components/Resource/ExportResources/ExportResources.js +9 -10
  220. package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js +1 -1
  221. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js +1 -1
  222. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.stories.js +1 -1
  223. package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.test.stories.js +1 -1
  224. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.js +2 -11
  225. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.stories.js +1 -1
  226. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItemContextualMenu.js +2 -11
  227. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByRootFolderContextualMenu.js +2 -11
  228. package/src/react-extension/components/Resource/FilterResourcesByGroups/FilterResourcesByGroups.js +2 -11
  229. package/src/react-extension/components/Resource/FilterResourcesByGroups/FilterResourcesByGroups.test.stories.js +1 -1
  230. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.js +4 -13
  231. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.js +1 -1
  232. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.stories.js +1 -1
  233. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.js +1 -1
  234. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.stories.js +1 -1
  235. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsContextualMenu.js +2 -11
  236. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsList.js +2 -11
  237. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsListContextualMenu.js +3 -12
  238. package/src/react-extension/components/Resource/FilterResourcesByText/FilterResourcesByText.test.stories.js +1 -1
  239. package/src/react-extension/components/Resource/ImportResources/ImportResources.test.stories.js +1 -1
  240. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.js +1 -1
  241. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.stories.js +1 -1
  242. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.stories.js +1 -1
  243. package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.stories.js +5 -3
  244. package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.js +1 -1
  245. package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.test.stories.js +1 -1
  246. package/src/react-extension/components/ResourceComment/DeleteResourceComment/DeleteComment.js +2 -1
  247. package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.js +1 -9
  248. package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.test.stories.js +5 -3
  249. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.js +2 -2
  250. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.stories.js +5 -3
  251. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetails.js +3 -3
  252. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsActivity.test.stories.js +2 -2
  253. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsComment.js +2 -11
  254. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.js +2 -10
  255. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.test.stories.js +1 -1
  256. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.js +1 -1
  257. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.test.data.js +1 -1
  258. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsPermission.js +2 -10
  259. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.js +3 -12
  260. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.stories.js +1 -1
  261. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +1 -1
  262. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.stories.js +1 -1
  263. package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.stories.js +1 -1
  264. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.js +1 -1
  265. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.stories.js +1 -1
  266. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +1 -1
  267. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.stories.js +1 -1
  268. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetails.js +1 -1
  269. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsActivity.test.stories.js +1 -1
  270. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.js +1 -9
  271. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.stories.js +1 -1
  272. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsPermissions.test.stories.js +1 -1
  273. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.js +10 -7
  274. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.test.stories.js +1 -1
  275. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.js +12 -9
  276. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.test.stories.js +1 -1
  277. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +10 -7
  278. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.test.stories.js +1 -1
  279. package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.js +2 -2
  280. package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.test.stories.js +1 -1
  281. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +1 -1
  282. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.stories.js +1 -1
  283. package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.js +2 -2
  284. package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTagsItemViewer.js +2 -11
  285. package/src/react-extension/components/Share/ShareDialog.js +124 -22
  286. package/src/react-extension/components/Share/ShareDialog.test.data.js +25 -1
  287. package/src/react-extension/components/Share/ShareDialog.test.js +87 -36
  288. package/src/react-extension/components/Share/ShareDialog.test.page.js +1 -1
  289. package/src/react-extension/components/Share/ShareDialog.test.stories.js +1 -1
  290. package/src/react-extension/components/Share/SharePermissionDeleteButton.js +2 -1
  291. package/src/react-extension/components/Share/SharePermissionItem.js +56 -0
  292. package/src/react-extension/components/Share/ShareVariesDetails.js +2 -11
  293. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.js +1 -1
  294. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.stories.js +1 -1
  295. package/src/react-extension/components/User/CreateUser/CreateUser.js +9 -9
  296. package/src/react-extension/components/User/CreateUser/CreateUser.test.stories.js +1 -1
  297. package/src/react-extension/components/User/DeleteUser/DeleteUser.js +1 -1
  298. package/src/react-extension/components/User/DeleteUser/DeleteUser.test.stories.js +1 -1
  299. package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.js +3 -3
  300. package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.test.stories.js +1 -1
  301. package/src/react-extension/components/User/DisplayExpiredAccountRecovery/DisplayExpiredAccountRecovery.js +1 -9
  302. package/src/react-extension/components/User/DisplayExpiredAccountRecovery/DisplayExpiredAccountRecovery.test.stories.js +1 -1
  303. package/src/react-extension/components/User/DisplayUserBadgeMenu/DisplayUserBadgeMenu.js +8 -17
  304. package/src/react-extension/components/User/DisplayUserBadgeMenu/DisplayUserBadgeMenu.test.stories.js +1 -1
  305. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +3 -3
  306. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.stories.js +1 -1
  307. package/src/react-extension/components/User/DisplayUserWorkspaceMainActions/DisplayUserWorkspaceMainActions.js +8 -17
  308. package/src/react-extension/components/User/DisplayUserWorkspaceMainActions/DisplayUserWorkspaceMainActions.test.js +4 -4
  309. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.js +1 -1
  310. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.stories.js +1 -1
  311. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.stories.js +1 -1
  312. package/src/react-extension/components/User/EditUser/EditUser.js +9 -9
  313. package/src/react-extension/components/User/EditUser/EditUser.test.stories.js +1 -1
  314. package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.stories.js +1 -1
  315. package/src/react-extension/components/User/FilterUsersByGroups/DisplayGroupContextualMenu.js +2 -11
  316. package/src/react-extension/components/User/FilterUsersByGroups/FilterUsersByGroup.test.stories.js +1 -1
  317. package/src/react-extension/components/User/FilterUsersByGroups/FilterUsersByGroupContextualMenu.js +2 -11
  318. package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.js +3 -12
  319. package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.test.stories.js +1 -1
  320. package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.js +1 -9
  321. package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.test.stories.js +1 -1
  322. package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.js +3 -3
  323. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.js +1 -9
  324. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.data.js +1 -1
  325. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.stories.js +1 -1
  326. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.js +1 -9
  327. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.stories.js +1 -1
  328. package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.test.stories.js +1 -1
  329. package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.js +1 -1
  330. package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.stories.js +22 -83
  331. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.js +8 -1
  332. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.data.js +20 -2
  333. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.js +25 -1
  334. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.stories.js +28 -26
  335. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +85 -57
  336. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.js +21 -6
  337. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.stories.js +1 -1
  338. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.js +1 -1
  339. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.test.stories.js +1 -1
  340. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.js +2 -2
  341. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.test.stories.js +1 -1
  342. package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.js +1 -1
  343. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsInformation/DisplayUserGroupDetailsInformation.test.stories.js +1 -1
  344. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.js +4 -13
  345. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.stories.js +1 -1
  346. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembersGroupMember.js +1 -9
  347. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +132 -151
  348. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.js +8 -1
  349. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +37 -14
  350. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.stories.js +5 -2
  351. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroupItem.js +209 -0
  352. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +1 -1
  353. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DisplayChangePassphraseIntroduction.js +2 -3
  354. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DownloadRecoveryKit.js +2 -2
  355. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +25 -12
  356. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +5 -1
  357. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +7 -0
  358. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.js +2 -10
  359. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.stories.js +1 -1
  360. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.js +1 -1
  361. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.stories.js +1 -1
  362. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.js +9 -2
  363. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.test.stories.js +58 -35
  364. package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.js +1 -1
  365. package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.test.stories.js +1 -1
  366. package/src/react-extension/components/UserSetting/DisplayUserSettingWorkspaceActions/DisplayUserSettingWorkspaceActions.js +2 -11
  367. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.js +2 -2
  368. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.test.stories.js +1 -1
  369. package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.js +1 -9
  370. package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.test.stories.js +1 -1
  371. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.js +8 -8
  372. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.test.stories.js +1 -1
  373. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.js +4 -13
  374. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.test.stories.js +1 -1
  375. package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.test.stories.js +1 -1
  376. package/src/react-extension/contexts/Authentication/AuthenticationRecoverContext.js +14 -1
  377. package/src/react-extension/test/fixture/Settings/siteSettings.js +20 -14
  378. package/src/react-extension/test/mock/components/Internationalisation/MockTranslationProvider.js +8 -1
  379. package/src/react-quickaccess/ExtQuickAccess.js +23 -9
  380. package/src/react-quickaccess/components/AnimatedSwitch/AnimatedSwitch.js +0 -1
  381. package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgress.js +2 -5
  382. package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgressPage.test.stories.js +1 -1
  383. package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.js +2 -2
  384. package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.test.stories.js +1 -1
  385. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.js +1 -1
  386. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.test.stories.js +1 -1
  387. package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.js +1 -1
  388. package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.test.stories.js +1 -1
  389. package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.js +1 -1
  390. package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.test.stories.js +1 -1
  391. package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.js +1 -1
  392. package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.test.stories.js +1 -1
  393. package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.js +1 -1
  394. package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.test.stories.js +1 -1
  395. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.js +2 -3
  396. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +3 -3
  397. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.stories.js +1 -1
  398. package/src/react-quickaccess/components/Header/Header.test.stories.js +1 -1
  399. package/src/react-quickaccess/components/HomePage/HomePage.js +0 -8
  400. package/src/react-quickaccess/components/HomePage/HomePage.test.stories.js +1 -1
  401. package/src/react-quickaccess/components/LoginPage/LoginPage.js +1 -9
  402. package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +1 -1
  403. package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.js +1 -1
  404. package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.test.stories.js +1 -1
  405. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.js +5 -5
  406. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.stories.js +1 -1
  407. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +1 -1
  408. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.stories.js +1 -1
  409. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +4 -4
  410. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.stories.js +1 -1
  411. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +3 -3
  412. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.test.stories.js +1 -1
  413. package/src/react-quickaccess/components/Search/Search.js +5 -5
  414. package/src/react-quickaccess/components/Search/Search.test.stories.js +1 -1
  415. package/src/react-web-integration/BrowserIntegrationBootstrap.js +0 -17
  416. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.stories.js +1 -1
  417. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.js +2 -2
  418. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.test.stories.js +1 -1
  419. package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +11 -1
  420. package/src/react-web-integration/lib/InForm/InformManager.test.data.js +60 -0
  421. package/src/react-web-integration/lib/InForm/InformManager.test.js +151 -6
  422. package/src/react-web-integration/lib/InForm/InformManager.test.page.js +39 -0
  423. package/src/shared/components/Icons/Icon.test.stories.js +1 -1
  424. package/src/shared/components/Password/Password.js +2 -1
  425. package/src/shared/components/Password/Password.test.page.js +4 -1
  426. package/src/shared/components/Password/Password.test.stories.js +1 -1
  427. package/src/shared/components/PasswordComplexity/PasswordComplexity.js +2 -2
  428. package/src/shared/components/PasswordComplexity/PasswordComplexity.test.stories.js +5 -5
  429. package/src/stories/assets/intro/hero.png +0 -0
  430. package/src/stories/assets/intro/intro.css +47 -0
  431. package/test/jest.setup.js +2 -0
@@ -55,12 +55,17 @@ describe('As AD I can generate an ORK', () => {
55
55
  * And I see an “Generate & Apply” button
56
56
  */
57
57
  it("As a logged in administrator on the account recovery settings in the administration workspace, I can open a dialog to generate an Organization Recovery Key", async() => {
58
+ expect.assertions(12);
58
59
  const page = new SelectAccountRecoveryOrganizationKeyPage(defaultProps());
59
60
  await waitFor(() => { });
60
61
  // Dialog title exists and correct
61
62
  expect(page.exists()).toBeTruthy();
62
63
 
63
- await page.clickOnGenerateTab(() => expect(page.isGenerateTabSeletect()).toBe(true));
64
+ await page.clickOnGenerateTab(() => {
65
+ if (!page.isGenerateTabSeletect()) {
66
+ throw new Error("Changes are not available yet");
67
+ }
68
+ });
64
69
 
65
70
  expect(page.isFieldRequired(page.nameField)).toBe(true);
66
71
  expect(page.isFieldRequired(page.emailField)).toBe(true);
@@ -91,12 +96,17 @@ describe('As AD I can generate an ORK', () => {
91
96
  * And I see a tooltip telling me that this setting is disable and safe
92
97
  */
93
98
  it("As a logged in administrator in the administration workspace, I can not select the algorithm type of the Organization Recovery Key generator", async() => {
99
+ expect.assertions(5);
94
100
  const page = new SelectAccountRecoveryOrganizationKeyPage(defaultProps());
95
101
  await waitFor(() => { });
96
102
  // Dialog title exists and correct
97
103
  expect(page.exists()).toBeTruthy();
98
104
 
99
- await page.clickOnGenerateTab(() => expect(page.isGenerateTabSeletect()).toBe(true));
105
+ await page.clickOnGenerateTab(() => {
106
+ if (!page.isGenerateTabSeletect()) {
107
+ throw new Error("Changes are not available yet");
108
+ }
109
+ });
100
110
 
101
111
  const tooltipText = "Algorithm and key size cannot be changed at the moment. These are secure default";
102
112
  expect(page.algorithmTooltip).not.toBeNull();
@@ -118,18 +128,34 @@ describe('As AD I can generate an ORK', () => {
118
128
  * Then the characters are replaced with symbols
119
129
  */
120
130
  it("As a logged in administrator in the administration workspace, I can show or hide the content of the “Organization key passphrase” text field in the Organization Recovery Key dialog", async() => {
131
+ expect.assertions(4);
121
132
  const page = new SelectAccountRecoveryOrganizationKeyPage(defaultProps());
122
- await waitFor(() => { });
133
+ await waitFor(() => {});
123
134
  // Dialog title exists and correct
124
135
  expect(page.exists()).toBeTruthy();
125
136
 
126
- await page.clickOnGenerateTab(() => expect(page.isGenerateTabSeletect()).toBe(true));
137
+ await page.clickOnGenerateTab(() => {
138
+ if (!page.isGenerateTabSeletect()) {
139
+ throw new Error("Changes are not available yet");
140
+ }
141
+ });
127
142
 
128
143
  page.passphraseField.value = "dummy-passphrase";
129
144
  expect(page.passphraseField.getAttribute("type")).toBe("password");
130
145
 
131
- await page.toggleShowPassword(() => expect(page.passphraseField.getAttribute("type")).toBe("text"));
132
- await page.toggleShowPassword(() => expect(page.passphraseField.getAttribute("type")).toBe("password"));
146
+ await page.toggleShowPassword(() => {
147
+ if (page.passphraseField.getAttribute("type") !== "text") {
148
+ throw new Error("Changes are not available yet");
149
+ }
150
+ });
151
+ expect(page.passphraseField.getAttribute("type")).toBe("text");
152
+
153
+ await page.toggleShowPassword(() => {
154
+ if (page.passphraseField.getAttribute("type") !== "password") {
155
+ throw new Error("Changes are not available yet");
156
+ }
157
+ });
158
+ expect(page.passphraseField.getAttribute("type")).toBe("password");
133
159
  });
134
160
 
135
161
  /**
@@ -141,13 +167,22 @@ describe('As AD I can generate an ORK', () => {
141
167
  * And I see the empty mandatory field label in @red
142
168
  */
143
169
  it("As a logged in administrator in the administration workspace, I cannot generate OpenPGP Public key in the Organization Recovery Key settings without a valid email and name", async() => {
170
+ expect.assertions(4);
144
171
  const page = new SelectAccountRecoveryOrganizationKeyPage(defaultProps());
145
172
  await waitFor(() => { });
146
173
  // Dialog title exists and correct
147
174
  expect(page.exists()).toBeTruthy();
148
- await page.clickOnGenerateTab(() => expect(page.isGenerateTabSeletect()).toBe(true));
149
-
150
- await page.clickOnGenerateButton(() => expect(page.nameError).not.toBeNull());
175
+ await page.clickOnGenerateTab(() => {
176
+ if (!page.isGenerateTabSeletect()) {
177
+ throw new Error("Changes are not available yet");
178
+ }
179
+ });
180
+
181
+ await page.clickOnGenerateButton(() => {
182
+ if (page.nameError === null) {
183
+ throw new Error("Changes are not available yet");
184
+ }
185
+ });
151
186
 
152
187
  expect(page.nameFieldError).not.toBeNull();
153
188
  expect(page.emailFieldError).not.toBeNull();
@@ -163,17 +198,26 @@ describe('As AD I can generate an ORK', () => {
163
198
  * Then I see an error message below the passphrase telling me to use a strong passphrase instead
164
199
  */
165
200
  it("As a logged in administrator in the administration workspace, I cannot generate OpenPGP Public key in the Organization Recovery Key settings without a strong passphrase", async() => {
201
+ expect.assertions(3);
166
202
  const page = new SelectAccountRecoveryOrganizationKeyPage(defaultProps());
167
- await waitFor(() => { });
203
+ await waitFor(() => {});
168
204
  // Dialog title exists and correct
169
205
  expect(page.exists()).toBeTruthy();
170
- await page.clickOnGenerateTab(() => expect(page.isGenerateTabSeletect()).toBe(true));
171
-
172
- page.nameField.value = "test";
173
- page.emailField.value = "test@passbolt.com";
174
- page.passphraseField.value = "almost fair passw";
175
-
176
- await page.clickOnGenerateButton(() => expect(page.nameError).not.toBeNull());
206
+ await page.clickOnGenerateTab(() => {
207
+ if (!page.isGenerateTabSeletect()) {
208
+ throw new Error("Changes are not available yet");
209
+ }
210
+ });
211
+
212
+ await page.type("test", page.nameField);
213
+ await page.type("test@passbolt.com", page.emailField);
214
+ await page.type("almost fair passw", page.passphraseField);
215
+
216
+ await page.clickOnGenerateButton(() => {
217
+ if (page.passphraseFieldError === null) {
218
+ throw new Error("Changes are not available yet");
219
+ }
220
+ });
177
221
 
178
222
  expect(page.passphraseFieldError).not.toBeNull();
179
223
  expect(page.passphraseFieldError.textContent).toBe(`A strong passphrase is required. The minimum complexity must be 'fair'`);
@@ -232,7 +232,7 @@ class ImportOrganizationKey extends React.Component {
232
232
  <textarea id="organization-recover-form-key" name="key" value={this.state.key}
233
233
  onKeyUp={this.handleKeyInputKeyUp} onChange={this.handleInputChange}
234
234
  disabled={this.hasAllInputDisabled()} ref={this.keyInputRef} className="required"
235
- placeholder='Add Open PGP Public key' required="required" autoComplete="off" autoFocus={true} />
235
+ placeholder={this.translate('Add Open PGP Public key')} required="required" autoComplete="off" autoFocus={true} />
236
236
  </div>
237
237
  <div className="input file">
238
238
  <input
@@ -68,14 +68,6 @@ class SelectAccountRecoveryOrganizationKey extends React.Component {
68
68
  this.props.handleUpdateOrganizationKey(public_key, private_key);
69
69
  }
70
70
 
71
- /**
72
- * Get the translate function
73
- * @returns {function(...[*]=)}
74
- */
75
- get translate() {
76
- return this.props.t;
77
- }
78
-
79
71
  /**
80
72
  * Render the component
81
73
  * @returns {JSX}
@@ -83,7 +75,7 @@ class SelectAccountRecoveryOrganizationKey extends React.Component {
83
75
  render() {
84
76
  return (
85
77
  <DialogWrapper
86
- title={this.translate("Organization Recovery Key")}
78
+ title={this.props.t("Organization Recovery Key")}
87
79
  onClose={this.handleCloseClick}
88
80
  disabled={this.state.processing}
89
81
  className="organization-recover-key-dialog">
@@ -259,4 +259,18 @@ export default class SelectAccountRecoveryOrganizationKeyPage {
259
259
 
260
260
  await waitFor(waitForCallback);
261
261
  }
262
+
263
+ async type(text, element) {
264
+ fireEvent.input(element, {
265
+ target: {
266
+ value: text
267
+ }
268
+ });
269
+
270
+ await waitFor(() => {
271
+ if (element.value !== text) {
272
+ throw new Error("The field has not changed yet.");
273
+ }
274
+ });
275
+ }
262
276
  }
@@ -22,7 +22,7 @@ import userSettingsFixture from "../../../test/fixture/Settings/userSettings";
22
22
 
23
23
 
24
24
  export default {
25
- title: 'Passbolt/Administration/SelectAccountRecoveryOrganizationKey',
25
+ title: 'Passbolt Component/Administration/SelectAccountRecoveryOrganizationKey',
26
26
  component: SelectAccountRecoveryOrganizationKey
27
27
  };
28
28
 
@@ -12,6 +12,7 @@
12
12
  * @since 3.2.0
13
13
  */
14
14
  import React, {Component} from "react";
15
+ import {Trans} from "react-i18next";
15
16
  import PropTypes from "prop-types";
16
17
  import Icon from "../../../../shared/components/Icons/Icon";
17
18
 
@@ -49,9 +50,9 @@ class AnnouncementWrapper extends Component {
49
50
  <div className={`${this.props.className} announcement`}>
50
51
  <div className="announcement-content">
51
52
  {this.props.canClose &&
52
- <a className="announcement-close" onClick={this.handleClose} role="button">
53
+ <a className="announcement-close dialog-close button button-transparent" onClick={this.handleClose} role="button">
53
54
  <Icon name='close'/>
54
- <span className="visually-hidden">Close</span>
55
+ <span className="visually-hidden"><Trans>Close</Trans></span>
55
56
  </a>
56
57
  }
57
58
  {this.props.children}
@@ -16,7 +16,7 @@ import PropTypes from "prop-types";
16
16
  import AnnouncementWrapper
17
17
  from "../AnnouncementWrapper/AnnouncementWrapper";
18
18
  import {withNavigationContext} from "../../../contexts/NavigationContext";
19
- import {Trans, withTranslation} from "react-i18next";
19
+ import {Trans} from "react-i18next";
20
20
  import {withAnnouncement} from "../../../contexts/AnnouncementContext";
21
21
 
22
22
  /**
@@ -31,7 +31,7 @@ class DisplayExpiredSubscriptionAnnouncement extends React.Component {
31
31
  return (
32
32
  <AnnouncementWrapper className="subscription" onClose={this.props.onClose} canClose={false}>
33
33
  <p>
34
- <Trans>Warning: </Trans>
34
+ <Trans>Warning:</Trans>&nbsp;
35
35
  <Trans>your subscription key has expired. The stability of the application is at risk.</Trans>
36
36
  <a onClick={this.props.navigationContext.onGoToAdministrationSubscriptionRequested}>
37
37
  <Trans>Manage Subscription</Trans>
@@ -48,4 +48,4 @@ DisplayExpiredSubscriptionAnnouncement.propTypes = {
48
48
  i18n: PropTypes.any
49
49
  };
50
50
 
51
- export default withNavigationContext(withAnnouncement(withTranslation('common')(DisplayExpiredSubscriptionAnnouncement)));
51
+ export default withNavigationContext(withAnnouncement(DisplayExpiredSubscriptionAnnouncement));
@@ -33,7 +33,7 @@ class DisplayGoingToExpireSubscriptionAnnouncement extends React.Component {
33
33
  formatDateTimeAgo(date) {
34
34
  const dateTime = DateTime.fromISO(date);
35
35
  const duration = dateTime.diffNow().toMillis();
36
- return duration > -1000 && duration < 0 ? this.translate('Just now') : dateTime.toRelative({locale: this.props.context.locale});
36
+ return duration > -1000 && duration < 0 ? this.props.t('Just now') : dateTime.toRelative({locale: this.props.context.locale});
37
37
  }
38
38
 
39
39
  /**
@@ -44,7 +44,7 @@ class DisplayGoingToExpireSubscriptionAnnouncement extends React.Component {
44
44
  return (
45
45
  <AnnouncementWrapper className="subscription" onClose={this.props.onClose} canClose={true}>
46
46
  <p>
47
- <Trans>Warning: </Trans>
47
+ <Trans>Warning:</Trans>&nbsp;
48
48
  <Trans>your subscription key will expire</Trans> {this.formatDateTimeAgo(this.props.expiry)}.
49
49
  <a onClick={this.props.navigationContext.onGoToAdministrationSubscriptionRequested}>
50
50
  <Trans>Manage Subscription</Trans>
@@ -60,6 +60,7 @@ DisplayGoingToExpireSubscriptionAnnouncement.propTypes = {
60
60
  expiry: PropTypes.string, // The subscription expiry date
61
61
  navigationContext: PropTypes.any, // The application navigation context
62
62
  onClose: PropTypes.func, // The close function
63
+ t: PropTypes.func, // The translation function
63
64
  };
64
65
 
65
66
  export default withAppContext(withNavigationContext(withAnnouncement(withTranslation('common')(DisplayGoingToExpireSubscriptionAnnouncement))));
@@ -16,7 +16,7 @@ import PropTypes from "prop-types";
16
16
  import AnnouncementWrapper
17
17
  from "../AnnouncementWrapper/AnnouncementWrapper";
18
18
  import {withNavigationContext} from "../../../contexts/NavigationContext";
19
- import {Trans, withTranslation} from "react-i18next";
19
+ import {Trans} from "react-i18next";
20
20
  import {withAnnouncement} from "../../../contexts/AnnouncementContext";
21
21
 
22
22
  /**
@@ -31,7 +31,7 @@ class DisplayInvalidSubscriptionAnnouncement extends React.Component {
31
31
  return (
32
32
  <AnnouncementWrapper className="subscription" onClose={this.props.onClose} canClose={false}>
33
33
  <p>
34
- <Trans>Warning: </Trans>
34
+ <Trans>Warning:</Trans>&nbsp;
35
35
  <Trans>your subscription key is not valid. The stability of the application is at risk.</Trans>
36
36
  <a onClick={this.props.navigationContext.onGoToAdministrationSubscriptionRequested}>
37
37
  <Trans>Manage Subscription</Trans>
@@ -48,4 +48,4 @@ DisplayInvalidSubscriptionAnnouncement.propTypes = {
48
48
  i18n: PropTypes.any
49
49
  };
50
50
 
51
- export default withNavigationContext(withAnnouncement(withTranslation('common')(DisplayInvalidSubscriptionAnnouncement)));
51
+ export default withNavigationContext(withAnnouncement(DisplayInvalidSubscriptionAnnouncement));
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import React, {Component} from "react";
15
15
  import PropTypes from "prop-types";
16
- import {Trans, withTranslation} from "react-i18next";
16
+ import {Trans} from "react-i18next";
17
17
  import {withAppContext} from "../../../contexts/AppContext";
18
18
 
19
19
  /**
@@ -88,4 +88,4 @@ AskForAuthenticationHelpCredentialLost.propTypes = {
88
88
  canRequestHelp: PropTypes.bool, // Can the user request administrator help. @deprecated since v3.6 the request help feature was added with v3.6
89
89
  };
90
90
 
91
- export default withAppContext(withTranslation('common')(AskForAuthenticationHelpCredentialLost));
91
+ export default withAppContext(AskForAuthenticationHelpCredentialLost);
@@ -18,7 +18,7 @@ import AskForAuthenticationHelpCredentialLost from "./AskForAuthenticationHelpCr
18
18
  import {defaultProps} from "./AskForAuthenticationHelpCredentialLost.test.data";
19
19
 
20
20
  export default {
21
- title: 'Passbolt/Authentication/AskForAuthenticationHelpCredentialLost',
21
+ title: 'Passbolt Component/Authentication/AskForAuthenticationHelpCredentialLost',
22
22
  component: AskForAuthenticationHelpCredentialLost
23
23
  };
24
24
 
@@ -12,7 +12,7 @@
12
12
  * @since 3.6.0
13
13
  */
14
14
  import React, {Component} from "react";
15
- import {Trans, withTranslation} from "react-i18next";
15
+ import {Trans} from "react-i18next";
16
16
 
17
17
  class CheckAccountRecoveryEmail extends Component {
18
18
  /**
@@ -33,4 +33,4 @@ class CheckAccountRecoveryEmail extends Component {
33
33
  }
34
34
  }
35
35
 
36
- export default withTranslation('common')(CheckAccountRecoveryEmail);
36
+ export default CheckAccountRecoveryEmail;
@@ -17,7 +17,7 @@ import {MemoryRouter, Route} from "react-router-dom";
17
17
  import CheckAccountRecoveryEmail from "./CheckAccountRecoveryEmail";
18
18
 
19
19
  export default {
20
- title: 'Passbolt/Authentication/CheckAccountRecoveryEmail',
20
+ title: 'Passbolt Component/Authentication/CheckAccountRecoveryEmail',
21
21
  component: CheckAccountRecoveryEmail
22
22
  };
23
23
 
@@ -12,18 +12,9 @@
12
12
  * @since 3.0.0
13
13
  */
14
14
  import React, {Component} from "react";
15
- import {Trans, withTranslation} from "react-i18next";
16
- import PropTypes from "prop-types";
15
+ import {Trans} from "react-i18next";
17
16
 
18
17
  class CheckMailBox extends Component {
19
- /**
20
- * Get the translate function
21
- * @returns {function(...[*]=)}
22
- */
23
- get translate() {
24
- return this.props.t;
25
- }
26
-
27
18
  /**
28
19
  * Render the component
29
20
  * @returns {JSX}
@@ -42,7 +33,6 @@ class CheckMailBox extends Component {
42
33
  }
43
34
 
44
35
  CheckMailBox.propTypes = {
45
- t: PropTypes.func, // The translation function
46
36
  };
47
37
 
48
- export default withTranslation('common')(CheckMailBox);
38
+ export default CheckMailBox;
@@ -17,7 +17,7 @@ import {MemoryRouter, Route} from "react-router-dom";
17
17
  import CheckMailBox from "./CheckMailBox";
18
18
 
19
19
  export default {
20
- title: 'Passbolt/Authentication/CheckMailBox',
20
+ title: 'Passbolt Component/Authentication/CheckMailBox',
21
21
  component: CheckMailBox
22
22
  };
23
23
 
@@ -13,8 +13,14 @@
13
13
  */
14
14
  import React, {Component} from "react";
15
15
  import PropTypes from "prop-types";
16
- import {Trans, withTranslation} from "react-i18next";
16
+ import debounce from "debounce-promise";
17
+ import {Trans} from "react-i18next";
17
18
  import Password from "../../../../shared/components/Password/Password";
19
+ import PasswordComplexity from "../../../../shared/components/PasswordComplexity/PasswordComplexity";
20
+ import SecretComplexity from "../../../../shared/lib/Secret/SecretComplexity";
21
+ import {SecretGenerator} from "../../../../shared/lib/SecretGenerator/SecretGenerator";
22
+ import ExternalServiceError from "../../../../shared/lib/Error/ExternalServiceError";
23
+ import ExternalServiceUnavailableError from "../../../../shared/lib/Error/ExternalServiceUnavailableError";
18
24
 
19
25
  /**
20
26
  * The component display variations.
@@ -36,6 +42,8 @@ class CheckPassphrase extends Component {
36
42
  constructor(props) {
37
43
  super(props);
38
44
  this.state = this.defaultState;
45
+ this.isPwndProcessingPromise = null;
46
+ this.evaluatePassphraseIsInDictionaryDebounce = debounce(this.evaluatePassphraseIsInDictionary, 300);
39
47
  this.bindEventHandlers();
40
48
  this.createReferences();
41
49
  }
@@ -55,7 +63,9 @@ class CheckPassphrase extends Component {
55
63
  errors: {
56
64
  emptyPassphrase: false, // True if the passphrase is empty
57
65
  invalidPassphrase: false, // True if the passphrase is invalid
58
- }
66
+ },
67
+ passphraseInDictionnary: false, // True if the passphrase is part of a data breach
68
+ isPwnedServiceAvailable: true // True if the isPwned service can be reached
59
69
  };
60
70
  }
61
71
 
@@ -116,31 +126,74 @@ class CheckPassphrase extends Component {
116
126
  */
117
127
  async handleSubmit(event) {
118
128
  event.preventDefault();
119
- await this.validate();
129
+ this.validate();
120
130
 
121
131
  if (this.isValid) {
122
- await this.toggleProcessing();
132
+ this.toggleProcessing();
123
133
  await this.check();
124
134
  }
125
135
  }
126
136
 
137
+ /**
138
+ * Evaluate if the passphrase is in dictionary
139
+ * @return {Promise<void>}
140
+ */
141
+ async evaluatePassphraseIsInDictionary() {
142
+ let isPwnedServiceAvailable = this.state.isPwnedServiceAvailable;
143
+ if (!isPwnedServiceAvailable) {
144
+ return;
145
+ }
146
+
147
+ const passphrase = this.state.passphrase;
148
+ let passphraseInDictionnary = false;
149
+ let passphraseEntropy = this.state.passphraseEntropy;
150
+
151
+ try {
152
+ passphraseInDictionnary = await SecretComplexity.ispwned(passphrase);
153
+ if (passphraseInDictionnary) {
154
+ passphraseEntropy = 0;
155
+ }
156
+ } catch (error) {
157
+ // If the service is unavailable don't block the user journey.
158
+ if (error instanceof ExternalServiceUnavailableError || error instanceof ExternalServiceError) {
159
+ isPwnedServiceAvailable = false;
160
+ passphraseInDictionnary = false;
161
+ } else {
162
+ throw error;
163
+ }
164
+ }
165
+
166
+ this.setState({
167
+ isPwnedServiceAvailable,
168
+ passphraseEntropy,
169
+ passphraseInDictionnary,
170
+ });
171
+ }
172
+
127
173
  /**
128
174
  * Whenever the user changes the private key
129
175
  * @param event An input event
130
176
  */
131
- async handleChangePassphrase(event) {
177
+ handleChangePassphrase(event) {
132
178
  const passphrase = event.target.value;
133
- await this.fillPassphrase(passphrase);
179
+ let passphraseEntropy = null;
180
+ if (passphrase.length) {
181
+ passphraseEntropy = SecretGenerator.entropy(passphrase);
182
+ this.isPwndProcessingPromise = this.evaluatePassphraseIsInDictionaryDebounce();
183
+ }
184
+
185
+ this.setState({passphrase, passphraseEntropy});
186
+
134
187
  if (this.state.hasBeenValidated) {
135
- await this.validate();
188
+ this.validate();
136
189
  }
137
190
  }
138
191
 
139
192
  /**
140
193
  * Whenever the user toggles the remember me flag
141
194
  */
142
- async handleToggleRememberMe() {
143
- await this.toggleRemmemberMe();
195
+ handleToggleRememberMe() {
196
+ this.toggleRemmemberMe();
144
197
  }
145
198
 
146
199
  /**
@@ -160,45 +213,36 @@ class CheckPassphrase extends Component {
160
213
  // Whenever the passphrase is invalid.
161
214
  this.toggleProcessing();
162
215
  if (error.name === "InvalidMasterPasswordError") {
163
- this.setState({errors: {invalidPassphrase: true}});
216
+ this.setState({errors: {...this.state.errors, invalidPassphrase: true}});
164
217
  } else {
165
218
  throw error;
166
219
  }
167
220
  }
168
221
 
169
- /**
170
- * Fill the passphrase
171
- * @param passphrase A passphrase
172
- */
173
- async fillPassphrase(passphrase) {
174
- await this.setState({passphrase});
175
- }
176
-
177
222
  /**
178
223
  * Toggle the remember me flag value
179
224
  */
180
- async toggleRemmemberMe() {
181
- await this.setState({rememberMe: !this.state.rememberMe});
225
+ toggleRemmemberMe() {
226
+ this.setState({rememberMe: !this.state.rememberMe});
182
227
  }
183
228
 
184
229
  /**
185
230
  * Validate the security token data
186
231
  */
187
- async validate() {
232
+ validate() {
188
233
  const {passphrase} = this.state;
189
- const emptyPassphrase = passphrase.trim() === '';
190
- if (emptyPassphrase) {
191
- await this.setState({hasBeenValidated: true, errors: {emptyPassphrase}});
192
- return;
193
- }
194
- await this.setState({hasBeenValidated: true, errors: {}});
234
+ const errors = {
235
+ emptyPassphrase: passphrase.trim() === '',
236
+ invalidPassphrase: false,
237
+ };
238
+ this.setState({hasBeenValidated: true, errors});
195
239
  }
196
240
 
197
241
  /**
198
242
  * Toggle the processing mode
199
243
  */
200
- async toggleProcessing() {
201
- await this.setState({actions: {processing: !this.state.actions.processing}});
244
+ toggleProcessing() {
245
+ this.setState({actions: {processing: !this.state.actions.processing}});
202
246
  }
203
247
 
204
248
  /**
@@ -208,25 +252,18 @@ class CheckPassphrase extends Component {
208
252
  this.passphraseInputRef.current.focus();
209
253
  }
210
254
 
211
- /**
212
- * Get the translate function
213
- * @returns {function(...[*]=)}
214
- */
215
- get translate() {
216
- return this.props.t;
217
- }
218
-
219
255
  /**
220
256
  * Render the component
221
257
  */
222
258
  render() {
223
259
  const processingClassName = this.isProcessing ? 'processing' : '';
260
+ const entropy = this.state.passphrase?.length ? this.state.passphraseEntropy : null;
224
261
  return (
225
262
  <div className="check-passphrase">
226
263
  <h1><Trans>Please enter your passphrase to continue.</Trans></h1>
227
264
  <form acceptCharset="utf-8" onSubmit={this.handleSubmit} className="enter-passphrase">
228
265
  <div className="form-content">
229
- <div className={`input-password-wrapper input required ${this.hasErrors ? "error" : ""}`}>
266
+ <div className={`input-password-wrapper input required ${this.hasErrors ? "error" : ""} ${!this.areActionsAllowed ? 'disabled' : ''}`}>
230
267
  <label htmlFor="passphrase"><Trans>Passphrase</Trans></label>
231
268
  <Password
232
269
  id="passphrase"
@@ -237,16 +274,27 @@ class CheckPassphrase extends Component {
237
274
  preview={true}
238
275
  onChange={this.handleChangePassphrase}
239
276
  disabled={!this.areActionsAllowed}/>
277
+ <PasswordComplexity entropy={entropy}/>
240
278
  {this.state.hasBeenValidated &&
241
279
  <>
242
280
  {this.state.errors.emptyPassphrase &&
243
281
  <div className="empty-passphrase error-message"><Trans>The passphrase should not be empty.</Trans></div>
244
282
  }
245
283
  {this.state.errors.invalidPassphrase &&
246
- <div className="invalid-passphrase error-message"><Trans>The passphrase is invalid.</Trans></div>
284
+ <div className="invalid-passphrase error-message"><Trans>The passphrase is invalid.</Trans></div>
247
285
  }
248
286
  </>
249
287
  }
288
+ {this.state.passphrase?.length > 0 &&
289
+ <>
290
+ {!this.state.isPwnedServiceAvailable &&
291
+ <div className="invalid-passphrase warning-message"><Trans>The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach</Trans></div>
292
+ }
293
+ {this.state.passphraseInDictionnary &&
294
+ <div className="invalid-passphrase warning-message"><Trans>The passphrase is part of an exposed data breach.</Trans></div>
295
+ }
296
+ </>
297
+ }
250
298
  </div>
251
299
  {this.props.canRememberMe &&
252
300
  <div className="input checkbox">
@@ -298,6 +346,5 @@ CheckPassphrase.propTypes = {
298
346
  ]), // Defines how the form should be displayed and behaves
299
347
  canRememberMe: PropTypes.bool, // True if the remember me flag must be displayed
300
348
  onSecondaryActionClick: PropTypes.func, // Callback to trigger when the user clicks on the secondary action link.
301
- t: PropTypes.func, // The translation function
302
349
  };
303
- export default withTranslation('common')(CheckPassphrase);
350
+ export default CheckPassphrase;
@@ -18,7 +18,7 @@ import CheckPassphrase, {CheckPassphraseVariations} from "./CheckPassphrase";
18
18
  import {defaultProps} from "./CheckPassphrase.test.data";
19
19
 
20
20
  export default {
21
- title: 'Passbolt/Authentication/CheckPassphrase',
21
+ title: 'Passbolt Component/Authentication/CheckPassphrase',
22
22
  component: CheckPassphrase
23
23
  };
24
24
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  import React, {Component} from "react";
16
16
  import PropTypes from "prop-types";
17
- import {Trans, withTranslation} from "react-i18next";
17
+ import {Trans} from "react-i18next";
18
18
 
19
19
  class ChooseAccountRecoveryPreference extends Component {
20
20
  /**
@@ -188,4 +188,4 @@ ChooseAccountRecoveryPreference.propTypes = {
188
188
  canGenerateNewKeyInstead: PropTypes.bool, // Can generate new key
189
189
  onGenerateNewKeyInstead: PropTypes.func, // Callback to trigger when the user wants to generate a new key instead.
190
190
  };
191
- export default withTranslation("common")(ChooseAccountRecoveryPreference);
191
+ export default ChooseAccountRecoveryPreference;