@plone-collective/volto-identity 1.0.0-alpha.6 → 1.0.0-alpha.7

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 (116) hide show
  1. package/.changelog.draft +27 -2
  2. package/CHANGELOG.md +32 -0
  3. package/README.md +4 -2
  4. package/locales/de/LC_MESSAGES/volto.po +220 -12
  5. package/locales/en/LC_MESSAGES/volto.po +220 -12
  6. package/locales/es/LC_MESSAGES/volto.po +220 -12
  7. package/locales/pt_BR/LC_MESSAGES/volto.po +220 -12
  8. package/locales/volto.pot +221 -13
  9. package/package.json +2 -2
  10. package/src/actions/account.test.ts +26 -0
  11. package/src/actions/account.ts +6 -3
  12. package/src/actions/index.ts +8 -1
  13. package/src/actions/profile.test.ts +18 -1
  14. package/src/actions/profile.ts +23 -0
  15. package/src/actions/providers.test.ts +35 -0
  16. package/src/actions/providers.ts +45 -0
  17. package/src/components/Blocks/SignIn/Edit.stories.tsx +36 -0
  18. package/src/components/Blocks/SignIn/Edit.test.tsx +97 -0
  19. package/src/components/Blocks/SignIn/Edit.tsx +51 -0
  20. package/src/components/Blocks/SignIn/View.stories.tsx +45 -0
  21. package/src/components/Blocks/SignIn/View.test.tsx +186 -0
  22. package/src/components/Blocks/SignIn/View.tsx +94 -0
  23. package/src/components/Blocks/SignIn/index.ts +28 -0
  24. package/src/components/Blocks/SignIn/schema.ts +137 -0
  25. package/src/components/Callback/Callback.scss +8 -0
  26. package/src/components/Callback/Callback.test.tsx +32 -1
  27. package/src/components/Callback/Callback.tsx +23 -4
  28. package/src/components/ConfirmEmail/ConfirmEmail.scss +52 -0
  29. package/src/components/ConfirmEmail/ConfirmEmail.stories.tsx +111 -0
  30. package/src/components/ConfirmEmail/ConfirmEmail.test.tsx +173 -0
  31. package/src/components/ConfirmEmail/ConfirmEmail.tsx +194 -0
  32. package/src/components/ControlPanel/ProviderForm.stories.tsx +4 -6
  33. package/src/components/ControlPanel/ProvidersControlPanel.scss +20 -1
  34. package/src/components/ControlPanel/ProvidersControlPanel.stories.tsx +104 -2
  35. package/src/components/ControlPanel/ProvidersControlPanel.test.tsx +469 -0
  36. package/src/components/ControlPanel/ProvidersControlPanel.tsx +243 -118
  37. package/src/components/ControlPanel/ProvidersTable.stories.tsx +72 -0
  38. package/src/components/ControlPanel/ProvidersTable.test.tsx +237 -0
  39. package/src/components/ControlPanel/ProvidersTable.tsx +329 -0
  40. package/src/components/Login/Login.test.tsx +113 -5
  41. package/src/components/Login/Login.tsx +24 -144
  42. package/src/components/Login/{LoginPanel.scss → LoginCard.scss} +12 -8
  43. package/src/components/Login/LoginCard.stories.tsx +39 -0
  44. package/src/components/Login/LoginCard.test.tsx +69 -0
  45. package/src/components/Login/LoginCard.tsx +55 -0
  46. package/src/components/Login/LoginForm.stories.tsx +13 -0
  47. package/src/components/Login/LoginForm.test.tsx +19 -0
  48. package/src/components/Login/LoginForm.tsx +20 -7
  49. package/src/components/Login/LoginPanel.tsx +10 -37
  50. package/src/components/Login/ProviderButton.scss +8 -2
  51. package/src/components/Login/ProviderButton.stories.tsx +10 -0
  52. package/src/components/Login/useLogin.ts +198 -0
  53. package/src/components/ProfileGate/ProfileGate.test.tsx +78 -0
  54. package/src/components/ProfileGate/ProfileGate.tsx +39 -10
  55. package/src/components/Toolbar/PersonalTools.stories.tsx +1 -1
  56. package/src/components/UserMenu/ApplicationsMenuItem.stories.tsx +1 -1
  57. package/src/components/UserMenu/IdentitiesMenuItem.stories.tsx +1 -1
  58. package/src/components/UserMenu/MenuItem.stories.tsx +1 -1
  59. package/src/components/UserMenu/ProfileMenuItem.stories.tsx +1 -1
  60. package/src/components/UserMenu/UserAvatar.stories.tsx +1 -1
  61. package/src/components/UserMenu/UserAvatar.test.tsx +16 -7
  62. package/src/components/UserMenu/UserMenuPlugs.stories.tsx +1 -1
  63. package/src/components/Views/GroupView.stories.tsx +14 -2
  64. package/src/components/Views/GroupView.test.tsx +49 -2
  65. package/src/components/Views/GroupView.tsx +10 -1
  66. package/src/components/Welcome/Welcome.stories.tsx +66 -0
  67. package/src/components/Welcome/Welcome.test.tsx +152 -0
  68. package/src/components/Welcome/Welcome.tsx +113 -0
  69. package/src/components/Welcome/WelcomeCard.scss +28 -0
  70. package/src/components/Welcome/WelcomeCard.stories.tsx +44 -0
  71. package/src/components/Welcome/WelcomeCard.test.tsx +96 -0
  72. package/src/components/Welcome/WelcomeCard.tsx +106 -0
  73. package/src/components/Widgets/ProviderIconWidget.scss +6 -0
  74. package/src/components/Widgets/ProviderIconWidget.stories.tsx +6 -0
  75. package/src/components/Widgets/ProviderIconWidget.test.tsx +49 -0
  76. package/src/components/Widgets/ProviderIconWidget.tsx +22 -1
  77. package/src/config/blocks.test.ts +132 -0
  78. package/src/config/blocks.ts +40 -0
  79. package/src/config/routes.test.ts +71 -0
  80. package/src/config/routes.ts +50 -0
  81. package/src/config/settings.test.ts +40 -0
  82. package/src/config/settings.ts +23 -9
  83. package/src/constants/ActionTypes.ts +3 -0
  84. package/src/helpers/avatar.test.ts +85 -6
  85. package/src/helpers/avatar.ts +30 -6
  86. package/src/helpers/download.test.ts +50 -0
  87. package/src/helpers/download.ts +32 -0
  88. package/src/helpers/firstLogin.test.ts +21 -0
  89. package/src/helpers/firstLogin.ts +5 -2
  90. package/src/helpers/profileGate.test.ts +38 -0
  91. package/src/helpers/profileGate.ts +71 -2
  92. package/src/helpers/providerOrder.test.ts +87 -0
  93. package/src/helpers/providerOrder.ts +56 -0
  94. package/src/helpers/providerSchema.test.ts +22 -0
  95. package/src/helpers/providerSchema.ts +7 -0
  96. package/src/helpers/redirectToSoleProvider.test.ts +111 -0
  97. package/src/helpers/redirectToSoleProvider.ts +65 -0
  98. package/src/helpers/showPloneLogin.test.ts +37 -6
  99. package/src/helpers/showPloneLogin.ts +4 -3
  100. package/src/helpers/welcome.test.ts +117 -0
  101. package/src/helpers/welcome.ts +91 -0
  102. package/src/index.ts +2 -0
  103. package/src/reducers/index.ts +19 -2
  104. package/src/reducers/profile.test.ts +67 -2
  105. package/src/reducers/profile.ts +14 -0
  106. package/src/reducers/providers.test.ts +36 -0
  107. package/src/reducers/providers.ts +17 -0
  108. package/src/stories/fixtures.tsx +97 -2
  109. package/src/{storybook → stories}/withPage.test.tsx +1 -1
  110. package/src/{storybook → stories}/withPage.tsx +1 -1
  111. package/src/{storybook → stories}/withUserMenu.tsx +1 -1
  112. package/src/types/api.ts +35 -0
  113. package/src/types/blocks.ts +26 -0
  114. package/src/types/index.ts +11 -2
  115. package/src/types/settings.ts +42 -0
  116. /package/src/{storybook → stories}/withUserMenu.test.tsx +0 -0
package/.changelog.draft CHANGED
@@ -1,8 +1,33 @@
1
- ## 1.0.0-alpha.6 (2026-09-10)
1
+ ## 1.0.0-alpha.7 (2026-09-12)
2
+
3
+
4
+ ### Breaking
5
+
6
+ - Moved the add-on's frontend settings under `config.settings.identity`. `config.settings.identityShowPloneLogin` is now `config.settings.identity.showPloneLogin`, and the old key is no longer read; `RAZZLE_IDENTITY_SHOW_PLONE_LOGIN` still overrides it. The avatar palette is configurable as `config.settings.identity.avatarColors`, and defaults to the shipped palette. A palette a project supplies is not checked for contrast. @ericof [#89](https://github.com/collective/pas-plugins-identity/issues/89)
2
7
 
3
8
 
4
9
  ### Feature
5
10
 
6
- - Asked for the caller's profile with the content request instead of separately. `@my-profile` is registered in `apiExpanders` for `GET_CONTENT`, and the profile gate now prefers the answer that arrived with the page, falling back to its own request on a route that fetches no content — `/login`, `/identities`, a control panel — or against a backend too old to offer the component. The expanded answer is used only when the content in the store is the page being rendered: Volto keeps the last content it loaded, so trusting it anywhere else would read a stale answer to a question whose whole point is freshness. `FirstLogin` and `Identities` no longer ask at all while anonymous; both routes are registered like any other, so an anonymous visitor opening them directly fired requests that could only answer 401. @ericof [#71](https://github.com/collective/pas-plugins-identity/issues/71)
11
+ - Added the `/confirm-email` route, where a person whose profile is waiting on an address confirmation chooses which of their verified addresses this site uses for them. `ProfileGate` and the first-login route send them there instead of to the edit form, which cannot answer the question; a profile missing fields as well still goes to the form first. @ericof [#80](https://github.com/collective/pas-plugins-identity/issues/80)
12
+ - Gave the providers control panel's settings, add and edit forms their own routes, so each can be linked to and reloaded, and the browser's Back button returns to the provider list. @ericof [#81](https://github.com/collective/pas-plugins-identity/issues/81)
13
+ - Added export actions to the providers control panel, one per provider and one for every provider, each downloading the registry document under the filename it belongs under in a profile. The panel says beside them that the file carries client secrets in the clear, and offers them only to someone allowed to export. @ericof [#83](https://github.com/collective/pas-plugins-identity/issues/83)
14
+ - Gave the providers control panel's list a Login screen column, and let its rows be dragged into the order the login page offers them. A dropped row moves at once, and goes back if the new order cannot be saved. @ericof [#84](https://github.com/collective/pas-plugins-identity/issues/84)
15
+ - The provider form's Icon field shows the driver's default icon until one is uploaded. @ericof [#86](https://github.com/collective/pas-plugins-identity/issues/86)
16
+ - Drew the login button of a provider on the new `keycloak` driver in the OpenID Connect colours. @ericof [#87](https://github.com/collective/pas-plugins-identity/issues/87)
17
+ - Added a Sign-in block, offered inside a grid, and kept out of a page's block chooser until a project lifts its restriction. It shows a visitor the login card `/login` shows, and greets somebody signed in with a welcome message and a summary: a link to their Profile, their preferred address, what they signed in with and when they last did, each line switchable in the sidebar. The login page's store and routing moved into a `useLogin` hook the two share, and its card into `LoginCard`, which `LoginPanel` puts on a page of its own. @ericof [#99](https://github.com/collective/pas-plugins-identity/issues/99)
18
+ - Made the login page's redirect to a site's only provider something a site can turn off, with `config.settings.identity.redirectToSoleProvider` or, at run time, `RAZZLE_IDENTITY_REDIRECT_TO_SOLE_PROVIDER`. It stays on by default. Even when on, it no longer fires for a visitor who arrived already signed in, which looped against a provider that still had a session, or for `/login?choose=1`, which the callback page now links to when a sign-in fails. @ericof [#100](https://github.com/collective/pas-plugins-identity/issues/100)
19
+
20
+
21
+ ### Bugfix
22
+
23
+ - Gave the Plone site driver's login button the Plone colours. Its class is `identity-provider--plone-identity`, and the stylesheet knew only `identity-provider--plone`, which the password button keeps. @ericof [#86](https://github.com/collective/pas-plugins-identity/issues/86)
24
+ - Darkened the first colour of the avatar palette from `#0083be` to `#007db6`. At 4.21:1 against the white initials it was the one shipped colour below WCAG AA; `#007db6` is the lightest colour of its hue that clears 4.5:1. @ericof [#89](https://github.com/collective/pas-plugins-identity/issues/89)
25
+ - Linked the groups listed under "Groups in this group" and "Part of" on a group's page to their own pages, the way members are linked to their Profiles. A group the site has no page for is shown as text. @ericof [#90](https://github.com/collective/pas-plugins-identity/issues/90)
26
+
27
+
28
+ ### Internal
29
+
30
+ - Moved the Storybook decorators `withPage` and `withUserMenu` from `src/storybook` to `src/stories`, beside the fixtures, so Storybook's support code lives in one directory. @ericof [#88](https://github.com/collective/pas-plugins-identity/issues/88)
31
+ - Moved the `IdentitySettings` type, and the augmentation that adds `identity` to Volto's settings, from `config/settings` to `types/settings`, beside the package's other types. It is exported from `types` like them. @ericof [#98](https://github.com/collective/pas-plugins-identity/issues/98)
7
32
 
8
33
 
package/CHANGELOG.md CHANGED
@@ -8,6 +8,38 @@
8
8
 
9
9
  <!-- towncrier release notes start -->
10
10
 
11
+ ## 1.0.0-alpha.7 (2026-09-12)
12
+
13
+
14
+ ### Breaking
15
+
16
+ - Moved the add-on's frontend settings under `config.settings.identity`. `config.settings.identityShowPloneLogin` is now `config.settings.identity.showPloneLogin`, and the old key is no longer read; `RAZZLE_IDENTITY_SHOW_PLONE_LOGIN` still overrides it. The avatar palette is configurable as `config.settings.identity.avatarColors`, and defaults to the shipped palette. A palette a project supplies is not checked for contrast. @ericof [#89](https://github.com/collective/pas-plugins-identity/issues/89)
17
+
18
+
19
+ ### Feature
20
+
21
+ - Added the `/confirm-email` route, where a person whose profile is waiting on an address confirmation chooses which of their verified addresses this site uses for them. `ProfileGate` and the first-login route send them there instead of to the edit form, which cannot answer the question; a profile missing fields as well still goes to the form first. @ericof [#80](https://github.com/collective/pas-plugins-identity/issues/80)
22
+ - Gave the providers control panel's settings, add and edit forms their own routes, so each can be linked to and reloaded, and the browser's Back button returns to the provider list. @ericof [#81](https://github.com/collective/pas-plugins-identity/issues/81)
23
+ - Added export actions to the providers control panel, one per provider and one for every provider, each downloading the registry document under the filename it belongs under in a profile. The panel says beside them that the file carries client secrets in the clear, and offers them only to someone allowed to export. @ericof [#83](https://github.com/collective/pas-plugins-identity/issues/83)
24
+ - Gave the providers control panel's list a Login screen column, and let its rows be dragged into the order the login page offers them. A dropped row moves at once, and goes back if the new order cannot be saved. @ericof [#84](https://github.com/collective/pas-plugins-identity/issues/84)
25
+ - The provider form's Icon field shows the driver's default icon until one is uploaded. @ericof [#86](https://github.com/collective/pas-plugins-identity/issues/86)
26
+ - Drew the login button of a provider on the new `keycloak` driver in the OpenID Connect colours. @ericof [#87](https://github.com/collective/pas-plugins-identity/issues/87)
27
+ - Added a Sign-in block, offered inside a grid, and kept out of a page's block chooser until a project lifts its restriction. It shows a visitor the login card `/login` shows, and greets somebody signed in with a welcome message and a summary: a link to their Profile, their preferred address, what they signed in with and when they last did, each line switchable in the sidebar. The login page's store and routing moved into a `useLogin` hook the two share, and its card into `LoginCard`, which `LoginPanel` puts on a page of its own. @ericof [#99](https://github.com/collective/pas-plugins-identity/issues/99)
28
+ - Made the login page's redirect to a site's only provider something a site can turn off, with `config.settings.identity.redirectToSoleProvider` or, at run time, `RAZZLE_IDENTITY_REDIRECT_TO_SOLE_PROVIDER`. It stays on by default. Even when on, it no longer fires for a visitor who arrived already signed in, which looped against a provider that still had a session, or for `/login?choose=1`, which the callback page now links to when a sign-in fails. @ericof [#100](https://github.com/collective/pas-plugins-identity/issues/100)
29
+
30
+
31
+ ### Bugfix
32
+
33
+ - Gave the Plone site driver's login button the Plone colours. Its class is `identity-provider--plone-identity`, and the stylesheet knew only `identity-provider--plone`, which the password button keeps. @ericof [#86](https://github.com/collective/pas-plugins-identity/issues/86)
34
+ - Darkened the first colour of the avatar palette from `#0083be` to `#007db6`. At 4.21:1 against the white initials it was the one shipped colour below WCAG AA; `#007db6` is the lightest colour of its hue that clears 4.5:1. @ericof [#89](https://github.com/collective/pas-plugins-identity/issues/89)
35
+ - Linked the groups listed under "Groups in this group" and "Part of" on a group's page to their own pages, the way members are linked to their Profiles. A group the site has no page for is shown as text. @ericof [#90](https://github.com/collective/pas-plugins-identity/issues/90)
36
+
37
+
38
+ ### Internal
39
+
40
+ - Moved the Storybook decorators `withPage` and `withUserMenu` from `src/storybook` to `src/stories`, beside the fixtures, so Storybook's support code lives in one directory. @ericof [#88](https://github.com/collective/pas-plugins-identity/issues/88)
41
+ - Moved the `IdentitySettings` type, and the augmentation that adds `identity` to Volto's settings, from `config/settings` to `types/settings`, beside the package's other types. It is exported from `types` like them. @ericof [#98](https://github.com/collective/pas-plugins-identity/issues/98)
42
+
11
43
  ## 1.0.0-alpha.6 (2026-09-10)
12
44
 
13
45
 
package/README.md CHANGED
@@ -40,7 +40,9 @@ Everything here renders from what the backend serves. The add-on describes no sc
40
40
  The check is deliberately not `Boolean(value)`, which reads the string `"false"` as true and would leave the password form up for an operator who had just switched it off.
41
41
 
42
42
  The form is **off** by default: a site installing this add-on has external providers, and offering a password form beside them invites people to make a second way into the same account.
43
- A site that is itself an identity provider is the case that wants it on, and sets `config.settings.identityShowPloneLogin` in its own configuration. The environment variable still wins over that.
43
+ A site that is itself an identity provider is the case that wants it on, and sets `config.settings.identity.showPloneLogin` in its own configuration. The environment variable still wins over that.
44
+
45
+ Every setting the add-on reads is under `config.settings.identity`: `showPloneLogin`, and `avatarColors`, the palette a user's initials are drawn on when they have no portrait. The shipped palette was chosen for contrast against the white initials; a palette you configure is not checked.
44
46
 
45
47
  **This variable is read at run time, not baked into the bundle.** That is why the Login component reads it through `runtimeConfig` rather than writing `process.env.RAZZLE_IDENTITY_SHOW_PLONE_LOGIN` literally: webpack substitutes the literal form while `pnpm build` runs, which would make the answer a property of the image and force two images on two sites wanting two answers.
46
48
 
@@ -199,7 +201,7 @@ Every component this add-on ships has stories, and a `.stories.tsx` beside a com
199
201
  Stories use Component Story Format 3, and payloads come from `src/stories/fixtures.tsx`, which holds provider lists, identities and audit entries shaped exactly like the backend serves them.
200
202
  Reuse those rather than inventing a payload, so a story that renders is evidence the component handles the real contract.
201
203
 
202
- Two decorators in `src/storybook/` cover what these components need from their surroundings.
204
+ Two decorators in `src/stories/`, beside the fixtures, cover what these components need from their surroundings.
203
205
 
204
206
  - `withPage` supplies the router and store a page-level component reads.
205
207
  - `withUserMenu` puts a component in the chrome it actually appears in, which is the only way to see a menu entry rendered where a user meets it.
@@ -25,7 +25,7 @@ msgstr ""
25
25
  #. Default: "Actions"
26
26
  #: components/Applications/ApplicationsPanel
27
27
  #: components/ControlPanel/ClientsPanel
28
- #: components/ControlPanel/ProvidersControlPanel
28
+ #: components/ControlPanel/ProvidersTable
29
29
  msgid "Actions"
30
30
  msgstr ""
31
31
 
@@ -54,6 +54,11 @@ msgstr ""
54
54
  msgid "Allow {client} to use your account?"
55
55
  msgstr ""
56
56
 
57
+ #. Default: "An export carries every client secret in the clear. Handle the file the way you would handle the secrets inside it."
58
+ #: components/ControlPanel/ProvidersControlPanel
59
+ msgid "An export carries every client secret in the clear."
60
+ msgstr ""
61
+
57
62
  #. Default: "Application"
58
63
  #: components/Applications/ApplicationsPanel
59
64
  msgid "Application"
@@ -65,6 +70,11 @@ msgstr ""
65
70
  msgid "Applications"
66
71
  msgstr ""
67
72
 
73
+ #. Default: "Authenticated with"
74
+ #: components/Welcome/WelcomeCard
75
+ msgid "Authenticated with"
76
+ msgstr ""
77
+
68
78
  #. Default: "Authorize"
69
79
  #: components/Consent/Consent
70
80
  msgid "Authorize"
@@ -87,6 +97,7 @@ msgid "Back"
87
97
  msgstr ""
88
98
 
89
99
  #. Default: "Back to sign-in options"
100
+ #: components/Callback/Callback
90
101
  #: components/Login/LoginForm
91
102
  msgid "Back to sign-in options"
92
103
  msgstr ""
@@ -96,6 +107,11 @@ msgstr ""
96
107
  msgid "Back to the list"
97
108
  msgstr ""
98
109
 
110
+ #. Default: "Back to the providers"
111
+ #: components/ControlPanel/ProvidersControlPanel
112
+ msgid "Back to the providers"
113
+ msgstr ""
114
+
99
115
  #. Default: "Cancel"
100
116
  #: components/ControlPanel/ClientsControlPanel
101
117
  #: components/ControlPanel/ConfirmModal
@@ -115,7 +131,7 @@ msgid "Choose a file"
115
131
  msgstr ""
116
132
 
117
133
  #. Default: "Choose how you would like to sign in."
118
- #: components/Login/Login
134
+ #: components/Login/useLogin
119
135
  msgid "Choose how you would like to sign in."
120
136
  msgstr ""
121
137
 
@@ -170,6 +186,12 @@ msgstr ""
170
186
  msgid "Confidential"
171
187
  msgstr ""
172
188
 
189
+ #. Default: "Confirm your email address"
190
+ #: components/ConfirmEmail/ConfirmEmail
191
+ #: components/ProfileGate/ProfileGate
192
+ msgid "Confirm your email address"
193
+ msgstr ""
194
+
173
195
  #. Default: "Confirming your address…"
174
196
  #: components/Callback/Callback
175
197
  msgid "Confirming your address"
@@ -190,9 +212,14 @@ msgstr ""
190
212
  msgid "Copy"
191
213
  msgstr ""
192
214
 
215
+ #. Default: "Default"
216
+ #: components/Blocks/SignIn/schema
217
+ msgid "Default"
218
+ msgstr ""
219
+
193
220
  #. Default: "Delete"
194
221
  #: components/ControlPanel/ConfirmModal
195
- #: components/ControlPanel/ProvidersControlPanel
222
+ #: components/ControlPanel/ProvidersTable
196
223
  #: components/ControlPanel/RenderUsers
197
224
  msgid "Delete"
198
225
  msgstr ""
@@ -223,14 +250,14 @@ msgid "Disabled. Its existing access tokens are refused as well."
223
250
  msgstr ""
224
251
 
225
252
  #. Default: "Driver"
226
- #: components/ControlPanel/ProvidersControlPanel
253
+ #: components/ControlPanel/ProvidersTable
227
254
  #: helpers/providerSchema
228
255
  msgid "Driver"
229
256
  msgstr ""
230
257
 
231
258
  #. Default: "Edit"
232
259
  #: components/ControlPanel/ClientsPanel
233
- #: components/ControlPanel/ProvidersControlPanel
260
+ #: components/ControlPanel/ProvidersTable
234
261
  #: components/ControlPanel/RenderUsers
235
262
  #: components/Toolbar/Toolbar
236
263
  msgid "Edit"
@@ -241,6 +268,11 @@ msgstr ""
241
268
  msgid "Edit your profile"
242
269
  msgstr ""
243
270
 
271
+ #. Default: "Editing"
272
+ #: components/Blocks/SignIn/schema
273
+ msgid "Editing"
274
+ msgstr ""
275
+
244
276
  #. Default: "Email address"
245
277
  #: components/Login/MagicLinkForm
246
278
  msgid "Email address"
@@ -259,7 +291,7 @@ msgstr ""
259
291
 
260
292
  #. Default: "Enabled"
261
293
  #: components/ControlPanel/ClientsPanel
262
- #: components/ControlPanel/ProvidersControlPanel
294
+ #: components/ControlPanel/ProvidersTable
263
295
  msgid "Enabled"
264
296
  msgstr ""
265
297
 
@@ -275,6 +307,16 @@ msgstr ""
275
307
  msgid "Expand toolbar"
276
308
  msgstr ""
277
309
 
310
+ #. Default: "Export"
311
+ #: components/ControlPanel/ProvidersTable
312
+ msgid "Export"
313
+ msgstr ""
314
+
315
+ #. Default: "Export every provider"
316
+ #: components/ControlPanel/ProvidersControlPanel
317
+ msgid "Export every provider"
318
+ msgstr ""
319
+
278
320
  #. Default: "File"
279
321
  #: components/Toolbar/Toolbar
280
322
  msgid "File"
@@ -305,13 +347,18 @@ msgstr ""
305
347
  msgid "Groups in this group"
306
348
  msgstr ""
307
349
 
350
+ #. Default: "Hello {fullname}!"
351
+ #: components/Blocks/SignIn/schema
352
+ msgid "Hello {fullname}!"
353
+ msgstr ""
354
+
308
355
  #. Default: "I have saved it"
309
356
  #: components/ControlPanel/SecretReveal
310
357
  msgid "I have saved it"
311
358
  msgstr ""
312
359
 
313
360
  #. Default: "Id"
314
- #: components/ControlPanel/ProvidersControlPanel
361
+ #: components/ControlPanel/ProvidersTable
315
362
  msgid "Id"
316
363
  msgstr ""
317
364
 
@@ -340,6 +387,11 @@ msgstr ""
340
387
  msgid "It will be able to read:"
341
388
  msgstr ""
342
389
 
390
+ #. Default: "Last login"
391
+ #: components/Welcome/WelcomeCard
392
+ msgid "Last login"
393
+ msgstr ""
394
+
343
395
  #. Default: "Last signed in"
344
396
  #: components/ControlPanel/UserAccountPanel
345
397
  msgid "Last signed in"
@@ -350,6 +402,16 @@ msgstr ""
350
402
  msgid "Link"
351
403
  msgstr ""
352
404
 
405
+ #. Default: "Link to their profile"
406
+ #: components/Blocks/SignIn/schema
407
+ msgid "Link to their profile"
408
+ msgstr ""
409
+
410
+ #. Default: "Loading"
411
+ #: components/ControlPanel/ProvidersControlPanel
412
+ msgid "Loading"
413
+ msgstr ""
414
+
353
415
  #. Default: "Loading clients…"
354
416
  #: components/ControlPanel/ClientsPanel
355
417
  msgid "Loading clients"
@@ -388,7 +450,7 @@ msgstr ""
388
450
  #. Default: "Log in"
389
451
  #: components/Callback/Callback
390
452
  #: components/FirstLogin/FirstLogin
391
- #: components/Login/Login
453
+ #: components/Login/useLogin
392
454
  msgid "Log in"
393
455
  msgstr ""
394
456
 
@@ -397,6 +459,11 @@ msgstr ""
397
459
  msgid "Login name"
398
460
  msgstr ""
399
461
 
462
+ #. Default: "Login screen"
463
+ #: components/ControlPanel/ProvidersTable
464
+ msgid "Login screen"
465
+ msgstr ""
466
+
400
467
  #. Default: "Logout"
401
468
  #: components/Toolbar/PersonalTools
402
469
  msgid "Logout"
@@ -432,6 +499,11 @@ msgstr ""
432
499
  msgid "More"
433
500
  msgstr ""
434
501
 
502
+ #. Default: "Move {title}"
503
+ #: components/ControlPanel/ProvidersTable
504
+ msgid "Move {title}"
505
+ msgstr ""
506
+
435
507
  #. Default: "News Item"
436
508
  #: components/Toolbar/Toolbar
437
509
  msgid "News Item"
@@ -439,7 +511,7 @@ msgstr ""
439
511
 
440
512
  #. Default: "No"
441
513
  #: components/ControlPanel/ClientsPanel
442
- #: components/ControlPanel/ProvidersControlPanel
514
+ #: components/ControlPanel/ProvidersTable
443
515
  msgid "No"
444
516
  msgstr ""
445
517
 
@@ -458,6 +530,11 @@ msgstr ""
458
530
  msgid "No login callback URL is configured"
459
531
  msgstr ""
460
532
 
533
+ #. Default: "No provider has the id {id}."
534
+ #: components/ControlPanel/ProvidersControlPanel
535
+ msgid "No provider has the id {id}."
536
+ msgstr ""
537
+
461
538
  #. Default: "No providers are configured yet."
462
539
  #: components/ControlPanel/ProvidersControlPanel
463
540
  msgid "No providers are configured yet."
@@ -488,6 +565,11 @@ msgstr ""
488
565
  msgid "Older keys stay in the ring so tokens already issued keep verifying."
489
566
  msgstr ""
490
567
 
568
+ #. Default: "Order"
569
+ #: components/ControlPanel/ProvidersTable
570
+ msgid "Order"
571
+ msgstr ""
572
+
491
573
  #. Default: "Page"
492
574
  #: components/Toolbar/Toolbar
493
575
  msgid "Page"
@@ -518,6 +600,11 @@ msgstr ""
518
600
  msgid "Personal tools"
519
601
  msgstr ""
520
602
 
603
+ #. Default: "Plain text. {username} is the name the user signs in with, and {fullname} their full name."
604
+ #: components/Blocks/SignIn/schema
605
+ msgid "Plain text. {username} is the name the user signs in with, and {fullname} their full name."
606
+ msgstr ""
607
+
521
608
  #. Default: "Please fill in {fields} before you can continue."
522
609
  #: components/ProfileGate/ProfileGate
523
610
  msgid "Please fill in {fields} before you can continue."
@@ -533,6 +620,16 @@ msgstr ""
533
620
  msgid "Preferred"
534
621
  msgstr ""
535
622
 
623
+ #. Default: "Preferred email"
624
+ #: components/Welcome/WelcomeCard
625
+ msgid "Preferred email"
626
+ msgstr ""
627
+
628
+ #. Default: "Preview the sign-in options"
629
+ #: components/Blocks/SignIn/schema
630
+ msgid "Preview the sign-in options"
631
+ msgstr ""
632
+
536
633
  #. Default: "Profile"
537
634
  #: components/UserMenu/ProfileMenuItem
538
635
  #: components/UserMenu/UserMenuPlugs
@@ -679,10 +776,15 @@ msgid "Sign in with a password"
679
776
  msgstr ""
680
777
 
681
778
  #. Default: "Sign in with your account on this site."
682
- #: components/Login/Login
779
+ #: components/Login/useLogin
683
780
  msgid "Sign in with your account on this site."
684
781
  msgstr ""
685
782
 
783
+ #. Default: "Sign-in"
784
+ #: components/Blocks/SignIn/schema
785
+ msgid "Sign-in"
786
+ msgstr ""
787
+
686
788
  #. Default: "Sign-in methods"
687
789
  #: components/ControlPanel/UserAccountPanel
688
790
  #: components/Identities/Identities
@@ -725,6 +827,7 @@ msgstr ""
725
827
 
726
828
  #. Default: "Test connection"
727
829
  #: components/ControlPanel/ProvidersControlPanel
830
+ #: components/ControlPanel/ProvidersTable
728
831
  msgid "Test connection"
729
832
  msgstr ""
730
833
 
@@ -758,16 +861,31 @@ msgstr ""
758
861
  msgid "That sign-in option is not available right now."
759
862
  msgstr ""
760
863
 
864
+ #. Default: "The new order could not be saved"
865
+ #: components/ControlPanel/ProvidersControlPanel
866
+ msgid "The new order could not be saved"
867
+ msgstr ""
868
+
761
869
  #. Default: "The provider refused the sign-in."
762
870
  #: components/Callback/Callback
763
871
  msgid "The provider refused the sign-in."
764
872
  msgstr ""
765
873
 
874
+ #. Default: "The providers could not be read, so this form cannot open."
875
+ #: components/ControlPanel/ProvidersControlPanel
876
+ msgid "The providers could not be read"
877
+ msgstr ""
878
+
766
879
  #. Default: "The site settings could not be read, so they cannot be edited here. The most likely cause is a settings field with no registry record, which happens when the add-on gained one and its profile has not been reapplied since."
767
880
  #: components/ControlPanel/ProvidersControlPanel
768
881
  msgid "The site settings could not be read"
769
882
  msgstr ""
770
883
 
884
+ #. Default: "Their preferred email"
885
+ #: components/Blocks/SignIn/schema
886
+ msgid "Their preferred email"
887
+ msgstr ""
888
+
771
889
  #. Default: "This application is disabled and is being refused already."
772
890
  #: components/Applications/ApplicationsPanel
773
891
  msgid "This application is disabled and is being refused already."
@@ -800,7 +918,7 @@ msgstr ""
800
918
 
801
919
  #. Default: "Title"
802
920
  #: components/ControlPanel/ClientsPanel
803
- #: components/ControlPanel/ProvidersControlPanel
921
+ #: components/ControlPanel/ProvidersTable
804
922
  msgid "Title"
805
923
  msgstr ""
806
924
 
@@ -835,6 +953,31 @@ msgstr ""
835
953
  msgid "Verify"
836
954
  msgstr ""
837
955
 
956
+ #. Default: "Welcome"
957
+ #: components/Welcome/WelcomeCard
958
+ msgid "Welcome"
959
+ msgstr ""
960
+
961
+ #. Default: "Welcome message"
962
+ #: components/Blocks/SignIn/schema
963
+ msgid "Welcome message"
964
+ msgstr ""
965
+
966
+ #. Default: "What they signed in with"
967
+ #: components/Blocks/SignIn/schema
968
+ msgid "What they signed in with"
969
+ msgstr ""
970
+
971
+ #. Default: "When they last signed in"
972
+ #: components/Blocks/SignIn/schema
973
+ msgid "When they last signed in"
974
+ msgstr ""
975
+
976
+ #. Default: "While editing only: show what a visitor who is not signed in sees."
977
+ #: components/Blocks/SignIn/schema
978
+ msgid "While editing only: show what a visitor who is not signed in sees."
979
+ msgstr ""
980
+
838
981
  #. Default: "Withdraw access"
839
982
  #: components/Applications/Applications
840
983
  #: components/Applications/ApplicationsPanel
@@ -853,7 +996,7 @@ msgstr ""
853
996
 
854
997
  #. Default: "Yes"
855
998
  #: components/ControlPanel/ClientsPanel
856
- #: components/ControlPanel/ProvidersControlPanel
999
+ #: components/ControlPanel/ProvidersTable
857
1000
  msgid "Yes"
858
1001
  msgstr ""
859
1002
 
@@ -882,11 +1025,21 @@ msgstr ""
882
1025
  msgid "Your email addresses"
883
1026
  msgstr ""
884
1027
 
1028
+ #. Default: "Your profile"
1029
+ #: components/Welcome/WelcomeCard
1030
+ msgid "Your profile"
1031
+ msgstr ""
1032
+
885
1033
  #. Default: "Your profile needs a few more details before you can continue."
886
1034
  #: components/ProfileGate/ProfileGate
887
1035
  msgid "Your profile needs a few more details before you can continue."
888
1036
  msgstr ""
889
1037
 
1038
+ #. Default: "Your verified addresses"
1039
+ #: components/ConfirmEmail/ConfirmEmail
1040
+ msgid "Your verified addresses"
1041
+ msgstr ""
1042
+
890
1043
  #. Default: "Forgot your password?"
891
1044
  #: components/Login/PasswordForm
892
1045
  msgid "box_forgot_password_option"
@@ -902,6 +1055,41 @@ msgstr ""
902
1055
  msgid "client-public-help"
903
1056
  msgstr ""
904
1057
 
1058
+ #. Default: "Continue"
1059
+ #: components/ConfirmEmail/ConfirmEmail
1060
+ msgid "confirm-email-continue"
1061
+ msgstr ""
1062
+
1063
+ #. Default: "You have more than one verified email address. Choose the one this site should use for you."
1064
+ #: components/ConfirmEmail/ConfirmEmail
1065
+ msgid "confirm-email-description"
1066
+ msgstr ""
1067
+
1068
+ #. Default: "This site will use {address} for you."
1069
+ #: components/ConfirmEmail/ConfirmEmail
1070
+ msgid "confirm-email-done"
1071
+ msgstr ""
1072
+
1073
+ #. Default: "That address could not be confirmed. Reload the page and try again."
1074
+ #: components/ConfirmEmail/ConfirmEmail
1075
+ msgid "confirm-email-failed"
1076
+ msgstr ""
1077
+
1078
+ #. Default: "Loading…"
1079
+ #: components/ConfirmEmail/ConfirmEmail
1080
+ msgid "confirm-email-loading"
1081
+ msgstr ""
1082
+
1083
+ #. Default: "There is no email address waiting to be confirmed."
1084
+ #: components/ConfirmEmail/ConfirmEmail
1085
+ msgid "confirm-email-nothing"
1086
+ msgstr ""
1087
+
1088
+ #. Default: "Confirm"
1089
+ #: components/ConfirmEmail/ConfirmEmail
1090
+ msgid "confirm-email-submit"
1091
+ msgstr ""
1092
+
905
1093
  #. Default: "Loading members…"
906
1094
  #: components/Views/GroupView
907
1095
  msgid "group-view-loading"
@@ -932,6 +1120,11 @@ msgstr ""
932
1120
  msgid "identities-sections"
933
1121
  msgstr ""
934
1122
 
1123
+ #. Default: "not verified"
1124
+ #: components/Welcome/WelcomeCard
1125
+ msgid "not verified"
1126
+ msgstr ""
1127
+
935
1128
  #. Default: "nothing beyond the fact that you signed in"
936
1129
  #: components/Consent/ConsentPanel
937
1130
  msgid "nothing beyond the fact that you signed in"
@@ -967,6 +1160,11 @@ msgstr ""
967
1160
  msgid "profile-emails-sent"
968
1161
  msgstr ""
969
1162
 
1163
+ #. Default: "You have more than one verified email address. Choose the one this site should use for you before you continue."
1164
+ #: components/ProfileGate/ProfileGate
1165
+ msgid "profile-gate-confirm-email"
1166
+ msgstr ""
1167
+
970
1168
  #. Default: "Unnamed user"
971
1169
  #: components/Views/ProfileView
972
1170
  msgid "profile-view-unnamed"
@@ -977,6 +1175,11 @@ msgstr ""
977
1175
  msgid "provider-driver-help"
978
1176
  msgstr ""
979
1177
 
1178
+ #. Default: "The driver's icon, used until one is uploaded."
1179
+ #: components/Widgets/ProviderIconWidget
1180
+ msgid "provider-icon-default"
1181
+ msgstr ""
1182
+
980
1183
  #. Default: "An SVG file. It is drawn in the button, so it takes the button colours; anything else is refused."
981
1184
  #: components/Widgets/ProviderIconWidget
982
1185
  msgid "provider-icon-hint"
@@ -1062,6 +1265,11 @@ msgstr ""
1062
1265
  msgid "user-account-sections"
1063
1266
  msgstr ""
1064
1267
 
1268
+ #. Default: "verified"
1269
+ #: components/Welcome/WelcomeCard
1270
+ msgid "verified"
1271
+ msgstr ""
1272
+
1065
1273
  #. Default: "verifying only"
1066
1274
  #: components/ControlPanel/ClientsPanel
1067
1275
  msgid "verifying only"