@plone-collective/volto-identity 1.0.0-alpha.4 → 1.0.0-alpha.5

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 (64) hide show
  1. package/.changelog.draft +17 -2
  2. package/CHANGELOG.md +20 -0
  3. package/locales/de/LC_MESSAGES/volto.po +92 -176
  4. package/locales/en/LC_MESSAGES/volto.po +92 -176
  5. package/locales/es/LC_MESSAGES/volto.po +92 -176
  6. package/locales/pt_BR/LC_MESSAGES/volto.po +92 -176
  7. package/locales/volto.pot +93 -177
  8. package/package.json +3 -3
  9. package/src/actions/account.ts +23 -0
  10. package/src/actions/clients.test.ts +54 -0
  11. package/src/actions/clients.ts +99 -0
  12. package/src/actions/consent.ts +68 -0
  13. package/src/actions/drivers.ts +16 -0
  14. package/src/actions/groups.ts +27 -0
  15. package/src/actions/identities.test.ts +40 -0
  16. package/src/actions/identities.ts +72 -0
  17. package/src/actions/index.ts +32 -521
  18. package/src/actions/keys.test.ts +19 -0
  19. package/src/actions/keys.ts +31 -0
  20. package/src/actions/login.test.ts +63 -0
  21. package/src/actions/login.ts +60 -0
  22. package/src/actions/magiclink.test.ts +20 -0
  23. package/src/actions/magiclink.ts +34 -0
  24. package/src/actions/profile.test.ts +37 -0
  25. package/src/actions/profile.ts +69 -0
  26. package/src/actions/providers.ts +85 -0
  27. package/src/components/ControlPanel/ProviderForm.stories.tsx +13 -8
  28. package/src/components/Views/BelowTitleSlot.stories.tsx +147 -0
  29. package/src/components/Views/BelowTitleSlot.test.tsx +83 -0
  30. package/src/components/Views/BelowTitleSlot.tsx +45 -0
  31. package/src/components/Views/GroupView.stories.tsx +3 -5
  32. package/src/components/Views/GroupView.test.tsx +44 -6
  33. package/src/components/Views/GroupView.tsx +10 -9
  34. package/src/components/Views/ProfileView.stories.tsx +12 -4
  35. package/src/components/Views/ProfileView.test.tsx +68 -10
  36. package/src/components/Views/ProfileView.tsx +21 -18
  37. package/src/constants/vocabularies.ts +9 -3
  38. package/src/helpers/groupmap.ts +8 -6
  39. package/src/helpers/providerSchema.test.ts +106 -3
  40. package/src/helpers/providerSchema.ts +91 -9
  41. package/src/reducers/account.ts +14 -0
  42. package/src/reducers/clients.test.ts +92 -0
  43. package/src/reducers/clients.ts +53 -0
  44. package/src/reducers/consent.ts +30 -0
  45. package/src/reducers/drivers.ts +14 -0
  46. package/src/reducers/factory.ts +74 -0
  47. package/src/reducers/groups.ts +14 -0
  48. package/src/reducers/identities.ts +45 -0
  49. package/src/reducers/index.test.ts +22 -0
  50. package/src/reducers/index.ts +68 -324
  51. package/src/reducers/keys.ts +20 -0
  52. package/src/reducers/login.test.ts +152 -0
  53. package/src/reducers/login.ts +37 -0
  54. package/src/reducers/magiclink.test.ts +25 -0
  55. package/src/reducers/magiclink.ts +20 -0
  56. package/src/reducers/profile.test.ts +84 -0
  57. package/src/reducers/profile.ts +33 -0
  58. package/src/reducers/providers.ts +58 -0
  59. package/src/stories/fixtures.tsx +116 -12
  60. package/src/{types.ts → types/api.ts} +8 -0
  61. package/src/types/content.ts +160 -0
  62. package/src/types/index.ts +19 -0
  63. package/src/actions/actions.test.ts +0 -226
  64. package/src/reducers/reducers.test.ts +0 -369
package/.changelog.draft CHANGED
@@ -1,6 +1,21 @@
1
- ## 1.0.0-alpha.4 (2026-09-08)
1
+ ## 1.0.0-alpha.5 (2026-09-09)
2
2
 
3
- No significant changes.
4
3
 
4
+ ### Feature
5
+
6
+ - The property map's target column is a picker over the fields a login writes, built from the vocabulary the provider schema serves rather than from a list held here. It was a text box, which accepted `email`, `portrait` and `username` alike and stored rows that did nothing. A backend that serves no vocabulary still gets the text box. @ericof [#43](https://github.com/collective/pas-plugins-identity/issues/43)
7
+ - Both content views now render a `belowTitle` slot, under the heading and above the description, so a deployment can put its own component on a profile or a group page without shadowing either view. `aboveContent` and `belowContent` already reached both pages, because Volto renders those around any view registered in `config.views.contentTypesViews`; nothing outside a view can place anything inside one, which is what the new slot is for. @ericof [#51](https://github.com/collective/pas-plugins-identity/issues/51)
8
+
9
+
10
+ ### Bugfix
11
+
12
+ - Label the rows of a provider's property and group maps. Volto's object-list widget takes a row's label and the add button's noun from the row schema's own title, and neither map declared one, so the Mapping tab read `UNDEFINED #1` above `+ Add undefined`. The two columns of each row are labelled and translated as well, where they had been the raw field names. @ericof [#53](https://github.com/collective/pas-plugins-identity/issues/53)
13
+ - `ProfileView` shows the login when a Profile has no full name, instead of "Unnamed user". It fell back to `content.title`, which a Profile never carries: `title` is computed on the backend rather than stored, so `plone.restapi` does not serialize it, and the test fixture supplied one no real payload has. The heading now follows the same order the backend's own `Title()` does — full name, login, userid. @ericof [#60](https://github.com/collective/pas-plugins-identity/issues/60)
14
+
15
+
16
+ ### Internal
17
+
18
+ - Split `actions/index.ts` and `reducers/index.ts` into one module per domain — login, magic link, identities, profile, groups, account, drivers, providers, clients, keys and consent — with the request-lifecycle factory the reducers share in `reducers/factory.ts`. Both `index.ts` files stay as the re-export surface, so nothing importing from the package root changes. The tests moved with them: 46 test files became 55, and the count is unchanged at 563. @ericof [#49](https://github.com/collective/pas-plugins-identity/issues/49)
19
+ - Split `src/types.ts` into `src/types/api.ts` and a new `src/types/content.ts`, re-exported from `src/types/index.ts` so every existing import keeps resolving. The new file describes `UserProfile` and `UserGroup` as Plone content, tied to `@plone/types` with `Pick` rather than `extends`: neither type carries Dublin Core or blocks behaviors, so most of `Content` is absent from the payload and inheriting it would promise fields no view can read. Every deviation is documented against a measured serialization. `providerFormSchema` and `clientFormSchema` are no longer `Record<string, any>`. @ericof [#50](https://github.com/collective/pas-plugins-identity/issues/50)
5
20
 
6
21
 
package/CHANGELOG.md CHANGED
@@ -8,6 +8,26 @@
8
8
 
9
9
  <!-- towncrier release notes start -->
10
10
 
11
+ ## 1.0.0-alpha.5 (2026-09-09)
12
+
13
+
14
+ ### Feature
15
+
16
+ - The property map's target column is a picker over the fields a login writes, built from the vocabulary the provider schema serves rather than from a list held here. It was a text box, which accepted `email`, `portrait` and `username` alike and stored rows that did nothing. A backend that serves no vocabulary still gets the text box. @ericof [#43](https://github.com/collective/pas-plugins-identity/issues/43)
17
+ - Both content views now render a `belowTitle` slot, under the heading and above the description, so a deployment can put its own component on a profile or a group page without shadowing either view. `aboveContent` and `belowContent` already reached both pages, because Volto renders those around any view registered in `config.views.contentTypesViews`; nothing outside a view can place anything inside one, which is what the new slot is for. @ericof [#51](https://github.com/collective/pas-plugins-identity/issues/51)
18
+
19
+
20
+ ### Bugfix
21
+
22
+ - Label the rows of a provider's property and group maps. Volto's object-list widget takes a row's label and the add button's noun from the row schema's own title, and neither map declared one, so the Mapping tab read `UNDEFINED #1` above `+ Add undefined`. The two columns of each row are labelled and translated as well, where they had been the raw field names. @ericof [#53](https://github.com/collective/pas-plugins-identity/issues/53)
23
+ - `ProfileView` shows the login when a Profile has no full name, instead of "Unnamed user". It fell back to `content.title`, which a Profile never carries: `title` is computed on the backend rather than stored, so `plone.restapi` does not serialize it, and the test fixture supplied one no real payload has. The heading now follows the same order the backend's own `Title()` does — full name, login, userid. @ericof [#60](https://github.com/collective/pas-plugins-identity/issues/60)
24
+
25
+
26
+ ### Internal
27
+
28
+ - Split `actions/index.ts` and `reducers/index.ts` into one module per domain — login, magic link, identities, profile, groups, account, drivers, providers, clients, keys and consent — with the request-lifecycle factory the reducers share in `reducers/factory.ts`. Both `index.ts` files stay as the re-export surface, so nothing importing from the package root changes. The tests moved with them: 46 test files became 55, and the count is unchanged at 563. @ericof [#49](https://github.com/collective/pas-plugins-identity/issues/49)
29
+ - Split `src/types.ts` into `src/types/api.ts` and a new `src/types/content.ts`, re-exported from `src/types/index.ts` so every existing import keeps resolving. The new file describes `UserProfile` and `UserGroup` as Plone content, tied to `@plone/types` with `Pick` rather than `extends`: neither type carries Dublin Core or blocks behaviors, so most of `Content` is absent from the payload and inheriting it would promise fields no view can read. Every deviation is documented against a measured serialization. `providerFormSchema` and `clientFormSchema` are no longer `Record<string, any>`. @ericof [#50](https://github.com/collective/pas-plugins-identity/issues/50)
30
+
11
31
  ## 1.0.0-alpha.4 (2026-09-08)
12
32
 
13
33
  No significant changes.
@@ -11,11 +11,6 @@ msgstr ""
11
11
  "Content-Transfer-Encoding: \n"
12
12
  "Plural-Forms: \n"
13
13
 
14
- #. Default: "Access"
15
- #: helpers/clientSchema
16
- msgid "Access"
17
- msgstr ""
18
-
19
14
  #. Default: "Access withdrawn"
20
15
  #: components/Applications/Applications
21
16
  msgid "Access withdrawn"
@@ -23,6 +18,7 @@ msgstr ""
23
18
 
24
19
  #. Default: "Account"
25
20
  #: components/ControlPanel/RenderUsers
21
+ #: components/ControlPanel/UserAccount
26
22
  msgid "Account"
27
23
  msgstr ""
28
24
 
@@ -38,11 +34,6 @@ msgstr ""
38
34
  msgid "Add"
39
35
  msgstr ""
40
36
 
41
- #. Default: "Add a provider"
42
- #: helpers/providerSchema
43
- msgid "Add a provider"
44
- msgstr ""
45
-
46
37
  #. Default: "Add another"
47
38
  #: components/Identities/IdentitiesList
48
39
  msgid "Add another"
@@ -74,11 +65,6 @@ msgstr ""
74
65
  msgid "Applications"
75
66
  msgstr ""
76
67
 
77
- #. Default: "Attribute mapping"
78
- #: helpers/providerSchema
79
- msgid "Attribute mapping"
80
- msgstr ""
81
-
82
68
  #. Default: "Authorize"
83
69
  #: components/Consent/Consent
84
70
  msgid "Authorize"
@@ -93,6 +79,7 @@ msgstr ""
93
79
  #: components/Applications/Applications
94
80
  #: components/ControlPanel/ClientsControlPanel
95
81
  #: components/ControlPanel/ProvidersControlPanel
82
+ #: components/ControlPanel/UserAccount
96
83
  #: components/Identities/Identities
97
84
  #: components/Toolbar/PersonalTools
98
85
  #: components/Toolbar/Toolbar
@@ -109,13 +96,9 @@ msgstr ""
109
96
  msgid "Back to the list"
110
97
  msgstr ""
111
98
 
112
- #. Default: "Background colour"
113
- #: helpers/providerSchema
114
- msgid "Background colour"
115
- msgstr ""
116
-
117
99
  #. Default: "Cancel"
118
100
  #: components/ControlPanel/ClientsControlPanel
101
+ #: components/ControlPanel/ConfirmModal
119
102
  #: components/ControlPanel/ProvidersControlPanel
120
103
  msgid "Cancel"
121
104
  msgstr ""
@@ -126,21 +109,31 @@ msgstr ""
126
109
  msgid "Changes saved"
127
110
  msgstr ""
128
111
 
112
+ #. Default: "Choose a file"
113
+ #: components/Widgets/ProviderIconWidget
114
+ msgid "Choose a file"
115
+ msgstr ""
116
+
129
117
  #. Default: "Choose how you would like to sign in."
130
118
  #: components/Login/Login
131
119
  msgid "Choose how you would like to sign in."
132
120
  msgstr ""
133
121
 
122
+ #. Default: "Claim"
123
+ #: helpers/providerSchema
124
+ msgid "Claim"
125
+ msgstr ""
126
+
127
+ #. Default: "Claim path"
128
+ #: helpers/providerSchema
129
+ msgid "Claim path"
130
+ msgstr ""
131
+
134
132
  #. Default: "Clear"
135
133
  #: components/Login/PasswordForm
136
134
  msgid "Clear"
137
135
  msgstr ""
138
136
 
139
- #. Default: "Client"
140
- #: helpers/clientSchema
141
- msgid "Client"
142
- msgstr ""
143
-
144
137
  #. Default: "Client ID"
145
138
  #: components/ControlPanel/ClientsPanel
146
139
  #: helpers/clientSchema
@@ -157,6 +150,11 @@ msgstr ""
157
150
  msgid "Client unregistered"
158
151
  msgstr ""
159
152
 
153
+ #. Default: "Close"
154
+ #: components/Login/LoginOverlay
155
+ msgid "Close"
156
+ msgstr ""
157
+
160
158
  #. Default: "Collection"
161
159
  #: components/Toolbar/Toolbar
162
160
  msgid "Collection"
@@ -193,6 +191,7 @@ msgid "Copy"
193
191
  msgstr ""
194
192
 
195
193
  #. Default: "Delete"
194
+ #: components/ControlPanel/ConfirmModal
196
195
  #: components/ControlPanel/ProvidersControlPanel
197
196
  #: components/ControlPanel/RenderUsers
198
197
  msgid "Delete"
@@ -237,16 +236,6 @@ msgstr ""
237
236
  msgid "Edit"
238
237
  msgstr ""
239
238
 
240
- #. Default: "Edit client"
241
- #: helpers/clientSchema
242
- msgid "Edit client"
243
- msgstr ""
244
-
245
- #. Default: "Edit provider"
246
- #: helpers/providerSchema
247
- msgid "Edit provider"
248
- msgstr ""
249
-
250
239
  #. Default: "Edit your profile"
251
240
  #: components/Identities/ProfileEmails
252
241
  msgid "Edit your profile"
@@ -259,6 +248,7 @@ msgstr ""
259
248
 
260
249
  #. Default: "Email addresses"
261
250
  #: components/ControlPanel/UserAccountPanel
251
+ #: components/Identities/IdentitiesList
262
252
  msgid "Email addresses"
263
253
  msgstr ""
264
254
 
@@ -270,8 +260,6 @@ msgstr ""
270
260
  #. Default: "Enabled"
271
261
  #: components/ControlPanel/ClientsPanel
272
262
  #: components/ControlPanel/ProvidersControlPanel
273
- #: helpers/clientSchema
274
- #: helpers/providerSchema
275
263
  msgid "Enabled"
276
264
  msgstr ""
277
265
 
@@ -297,20 +285,19 @@ msgstr ""
297
285
  msgid "Focus on"
298
286
  msgstr ""
299
287
 
300
- #. Default: "Foreground colour"
301
- #: helpers/providerSchema
302
- msgid "Foreground colour"
303
- msgstr ""
304
-
305
288
  #. Default: "Grants"
306
289
  #: components/ControlPanel/ClientsPanel
307
- #: helpers/clientSchema
308
290
  msgid "Grants"
309
291
  msgstr ""
310
292
 
311
- #. Default: "Group mapping"
293
+ #. Default: "Group"
312
294
  #: helpers/providerSchema
313
- msgid "Group mapping"
295
+ msgid "Group"
296
+ msgstr ""
297
+
298
+ #. Default: "Group map"
299
+ #: helpers/providerSchema
300
+ msgid "Group map"
314
301
  msgstr ""
315
302
 
316
303
  #. Default: "Groups in this group"
@@ -323,16 +310,16 @@ msgstr ""
323
310
  msgid "I have saved it"
324
311
  msgstr ""
325
312
 
326
- #. Default: "Icon"
327
- #: helpers/providerSchema
328
- msgid "Icon"
329
- msgstr ""
330
-
331
313
  #. Default: "Id"
332
314
  #: components/ControlPanel/ProvidersControlPanel
333
315
  msgid "Id"
334
316
  msgstr ""
335
317
 
318
+ #. Default: "Identity"
319
+ #: helpers/providerSchema
320
+ msgid "Identity"
321
+ msgstr ""
322
+
336
323
  #. Default: "Identity providers"
337
324
  #: components/ControlPanel/ProvidersControlPanel
338
325
  msgid "Identity providers"
@@ -415,6 +402,11 @@ msgstr ""
415
402
  msgid "Logout"
416
403
  msgstr ""
417
404
 
405
+ #. Default: "Make preferred"
406
+ #: components/Identities/ProfileEmails
407
+ msgid "Make preferred"
408
+ msgstr ""
409
+
418
410
  #. Default: "Mapping"
419
411
  #: helpers/providerSchema
420
412
  msgid "Mapping"
@@ -547,19 +539,14 @@ msgstr ""
547
539
  msgid "Profile"
548
540
  msgstr ""
549
541
 
550
- #. Default: "Provider"
551
- #: helpers/providerSchema
552
- msgid "Provider"
553
- msgstr ""
554
-
555
- #. Default: "Provider ID"
542
+ #. Default: "Profile field"
556
543
  #: helpers/providerSchema
557
- msgid "Provider ID"
544
+ msgid "Profile field"
558
545
  msgstr ""
559
546
 
560
- #. Default: "Provider claim"
547
+ #. Default: "Property map"
561
548
  #: helpers/providerSchema
562
- msgid "Provider claim"
549
+ msgid "Property map"
563
550
  msgstr ""
564
551
 
565
552
  #. Default: "Provider deleted"
@@ -572,6 +559,11 @@ msgstr ""
572
559
  msgid "Provider group"
573
560
  msgstr ""
574
561
 
562
+ #. Default: "Provider id"
563
+ #: helpers/providerSchema
564
+ msgid "Provider id"
565
+ msgstr ""
566
+
575
567
  #. Default: "Public (PKCE required)"
576
568
  #: components/ControlPanel/ClientsPanel
577
569
  msgid "Public (PKCE required)"
@@ -602,15 +594,9 @@ msgstr ""
602
594
  msgid "Recent activity"
603
595
  msgstr ""
604
596
 
605
- #. Default: "Redirect URIs"
606
- #: helpers/clientSchema
607
- msgid "Redirect URIs"
608
- msgstr ""
609
-
610
597
  #. Default: "Register a client"
611
598
  #: components/ControlPanel/ClientsControlPanel
612
599
  #: components/ControlPanel/ClientsPanel
613
- #: helpers/clientSchema
614
600
  msgid "Register a client"
615
601
  msgstr ""
616
602
 
@@ -619,11 +605,22 @@ msgstr ""
619
605
  msgid "Registered clients"
620
606
  msgstr ""
621
607
 
608
+ #. Default: "Registration"
609
+ #: helpers/clientSchema
610
+ msgid "Registration"
611
+ msgstr ""
612
+
622
613
  #. Default: "Remove"
623
614
  #: components/Identities/IdentitiesList
615
+ #: components/Widgets/ProviderIconWidget
624
616
  msgid "Remove"
625
617
  msgstr ""
626
618
 
619
+ #. Default: "Replace existing file"
620
+ #: components/Widgets/ProviderIconWidget
621
+ msgid "Replace existing file"
622
+ msgstr ""
623
+
627
624
  #. Default: "Rotate secret"
628
625
  #: components/ControlPanel/ClientsPanel
629
626
  msgid "Rotate secret"
@@ -642,7 +639,6 @@ msgstr ""
642
639
 
643
640
  #. Default: "Scope"
644
641
  #: components/ControlPanel/ClientsPanel
645
- #: helpers/clientSchema
646
642
  msgid "Scope"
647
643
  msgstr ""
648
644
 
@@ -656,9 +652,9 @@ msgstr ""
656
652
  msgid "Secret for {clientId}"
657
653
  msgstr ""
658
654
 
659
- #. Default: "Service user"
660
- #: helpers/clientSchema
661
- msgid "Service user"
655
+ #. Default: "Sending"
656
+ #: components/Login/MagicLinkForm
657
+ msgid "Sending"
662
658
  msgstr ""
663
659
 
664
660
  #. Default: "Settings"
@@ -667,11 +663,6 @@ msgstr ""
667
663
  msgid "Settings"
668
664
  msgstr ""
669
665
 
670
- #. Default: "Show on the login screen"
671
- #: helpers/providerSchema
672
- msgid "Show on the login screen"
673
- msgstr ""
674
-
675
666
  #. Default: "Shrink toolbar"
676
667
  #: components/Toolbar/Toolbar
677
668
  msgid "Shrink toolbar"
@@ -695,6 +686,7 @@ msgstr ""
695
686
  #. Default: "Sign-in methods"
696
687
  #: components/ControlPanel/UserAccountPanel
697
688
  #: components/Identities/Identities
689
+ #: components/Identities/IdentitiesList
698
690
  #: components/UserMenu/IdentitiesMenuItem
699
691
  msgid "Sign-in methods"
700
692
  msgstr ""
@@ -726,11 +718,6 @@ msgstr ""
726
718
  msgid "Site Setup"
727
719
  msgstr ""
728
720
 
729
- #. Default: "Style"
730
- #: helpers/providerSchema
731
- msgid "Style"
732
- msgstr ""
733
-
734
721
  #. Default: "Taking you to {provider}…"
735
722
  #: components/Login/LoginForm
736
723
  msgid "Taking you to {provider}…"
@@ -814,8 +801,6 @@ msgstr ""
814
801
  #. Default: "Title"
815
802
  #: components/ControlPanel/ClientsPanel
816
803
  #: components/ControlPanel/ProvidersControlPanel
817
- #: helpers/clientSchema
818
- #: helpers/providerSchema
819
804
  msgid "Title"
820
805
  msgstr ""
821
806
 
@@ -839,11 +824,6 @@ msgstr ""
839
824
  msgid "Unregister this client?"
840
825
  msgstr ""
841
826
 
842
- #. Default: "User field"
843
- #: helpers/providerSchema
844
- msgid "User field"
845
- msgstr ""
846
-
847
827
  #. Default: "Verified"
848
828
  #: components/ControlPanel/UserAccountPanel
849
829
  #: components/Identities/ProfileEmails
@@ -855,12 +835,8 @@ msgstr ""
855
835
  msgid "Verify"
856
836
  msgstr ""
857
837
 
858
- #. Default: "Which integration handles this provider."
859
- #: helpers/providerSchema
860
- msgid "Which integration handles this provider."
861
- msgstr ""
862
-
863
838
  #. Default: "Withdraw access"
839
+ #: components/Applications/Applications
864
840
  #: components/Applications/ApplicationsPanel
865
841
  msgid "Withdraw access"
866
842
  msgstr ""
@@ -911,44 +887,19 @@ msgstr ""
911
887
  msgid "Your profile needs a few more details before you can continue."
912
888
  msgstr ""
913
889
 
914
- #. Default: "What each provider claim writes onto the Plone user. A field that already has a value locally is left alone."
915
- #: helpers/providerSchema
916
- msgid "attribute-mapping-help"
917
- msgstr ""
918
-
919
890
  #. Default: "Forgot your password?"
920
891
  #: components/Login/PasswordForm
921
892
  msgid "box_forgot_password_option"
922
893
  msgstr ""
923
894
 
924
- #. Default: "A disabled client is refused at every endpoint, and its existing access tokens are refused as well: the audience is checked against this registry on every request."
925
- #: helpers/clientSchema
926
- msgid "client-enabled-help"
927
- msgstr ""
928
-
929
- #. Default: "Which flows this client may use. A grant is refused at the token endpoint unless it is listed here."
930
- #: helpers/clientSchema
931
- msgid "client-grants-help"
932
- msgstr ""
933
-
934
- #. Default: "Permanent. Every token minted for this client carries it as the audience, so renaming it later would strand them all."
895
+ #. Default: "Permanent. It is what every token already issued is bound to, so it cannot be changed afterwards."
935
896
  #: helpers/clientSchema
936
897
  msgid "client-id-help"
937
898
  msgstr ""
938
899
 
939
- #. Default: "The most this client may ever be granted, one entry per token. A request for more is cut down to this rather than refused."
900
+ #. Default: "A native or browser app, which cannot keep a secret. No secret is minted and PKCE becomes mandatory instead."
940
901
  #: helpers/clientSchema
941
- msgid "client-scope-help"
942
- msgstr ""
943
-
944
- #. Default: "What the consent screen calls this client."
945
- #: helpers/clientSchema
946
- msgid "client-title-help"
947
- msgstr ""
948
-
949
- #. Default: "Which of the provider's groups grant a group here. Empty grants nothing. Every sign-in reconciles, so a membership revoked at the provider stops granting here -- but only groups this provider granted are ever taken back, so a group you granted by hand is safe."
950
- #: helpers/providerSchema
951
- msgid "group-mapping-help"
902
+ msgid "client-public-help"
952
903
  msgstr ""
953
904
 
954
905
  #. Default: "Loading members…"
@@ -976,9 +927,9 @@ msgstr ""
976
927
  msgid "group-view-through"
977
928
  msgstr ""
978
929
 
979
- #. Default: "The group it grants on this site. A group that does not exist here grants nothing."
980
- #: helpers/providerSchema
981
- msgid "local-group-help"
930
+ #. Default: "How you sign in"
931
+ #: components/Identities/IdentitiesList
932
+ msgid "identities-sections"
982
933
  msgstr ""
983
934
 
984
935
  #. Default: "nothing beyond the fact that you signed in"
@@ -986,6 +937,11 @@ msgstr ""
986
937
  msgid "nothing beyond the fact that you signed in"
987
938
  msgstr ""
988
939
 
940
+ #. Default: "Move an address to the top to make it the one this site uses for you."
941
+ #: components/Identities/ProfileEmails
942
+ msgid "profile-emails-choose"
943
+ msgstr ""
944
+
989
945
  #. Default: "Your profile carries no email address yet."
990
946
  #: components/Identities/ProfileEmails
991
947
  msgid "profile-emails-empty"
@@ -996,6 +952,11 @@ msgstr ""
996
952
  msgid "profile-emails-intro"
997
953
  msgstr ""
998
954
 
955
+ #. Default: "A verified address is how this site recognises you when you add another provider. Add an address on your profile first, then verify it here."
956
+ #: components/Identities/ProfileEmails
957
+ msgid "profile-emails-intro-no-sign-in"
958
+ msgstr ""
959
+
999
960
  #. Default: "The address this site uses for you: the first verified one, or the first on your profile when none is verified."
1000
961
  #: components/Identities/ProfileEmails
1001
962
  msgid "profile-emails-preferred-help"
@@ -1011,66 +972,21 @@ msgstr ""
1011
972
  msgid "profile-view-unnamed"
1012
973
  msgstr ""
1013
974
 
1014
- #. Default: "A hex value such as #24292f. Empty leaves the theme's own styling alone."
975
+ #. Default: "Which service this provider talks to. It decides the rest of the form, and it cannot be changed afterwards."
1015
976
  #: helpers/providerSchema
1016
- msgid "provider-background-colour-help"
977
+ msgid "provider-driver-help"
1017
978
  msgstr ""
1018
979
 
1019
- #. Default: "Dotted path into the claims, for example email or address.formatted. Normalized claims are tried before the provider's raw payload."
1020
- #: helpers/providerSchema
1021
- msgid "provider-claim-help"
1022
- msgstr ""
1023
-
1024
- #. Default: "Whether this provider works at all. A disabled one keeps its settings and its stored identities, and nobody can sign in or link through it."
1025
- #: helpers/providerSchema
1026
- msgid "provider-enabled-help"
1027
- msgstr ""
1028
-
1029
- #. Default: "The colour of the button text and icon, as a hex value."
1030
- #: helpers/providerSchema
1031
- msgid "provider-foreground-colour-help"
1032
- msgstr ""
1033
-
1034
- #. Default: "The group's name as the provider sends it. Free text: this site cannot enumerate the far end. A name with no row here grants nothing, and is never created."
1035
- #: helpers/providerSchema
1036
- msgid "provider-group-help"
1037
- msgstr ""
1038
-
1039
- #. Default: "An SVG document, pasted as its source. Empty means no icon, and the button then shows the title alone. What is stored is sanitized: scripts, styles and anything referencing a URL are removed, and a document that is not an SVG is refused."
1040
- #: helpers/providerSchema
1041
- msgid "provider-icon-help"
980
+ #. Default: "An SVG file. It is drawn in the button, so it takes the button colours; anything else is refused."
981
+ #: components/Widgets/ProviderIconWidget
982
+ msgid "provider-icon-hint"
1042
983
  msgstr ""
1043
984
 
1044
- #. Default: "Permanent. It is stored on every identity linked through this provider, so renaming it later would orphan them all. Letters, digits, - and _ only."
985
+ #. Default: "Used in URLs and stored with every identity linked through this provider, so it is permanent."
1045
986
  #: helpers/providerSchema
1046
987
  msgid "provider-id-help"
1047
988
  msgstr ""
1048
989
 
1049
- #. Default: "Whether the login screen offers a button for it. An enabled provider that is not shown still works: it stays linkable from a user's own sign-in methods, and an account already linked to it still signs in."
1050
- #: helpers/providerSchema
1051
- msgid "provider-show-in-login-help"
1052
- msgstr ""
1053
-
1054
- #. Default: "What the sign-in button says. Defaults to the driver name."
1055
- #: helpers/providerSchema
1056
- msgid "provider-title-help"
1057
- msgstr ""
1058
-
1059
- #. Default: "A browser or native app, which cannot keep a secret. PKCE is required for these and no secret is issued. Not editable afterwards: turning a confidential client public would leave a stored secret hash that nothing checks."
1060
- #: helpers/clientSchema
1061
- msgid "public-client-help"
1062
- msgstr ""
1063
-
1064
- #. Default: "Matched exactly -- a trailing slash or an extra query parameter is a different URI. A client using the authorization code grant needs at least one."
1065
- #: helpers/clientSchema
1066
- msgid "redirect-uris-help"
1067
- msgstr ""
1068
-
1069
- #. Default: "The Plone userid a client-credentials token acts as. Only that grant uses it; leave it empty for a client that signs people in."
1070
- #: helpers/clientSchema
1071
- msgid "service-user-help"
1072
- msgstr ""
1073
-
1074
990
  #. Default: "signing"
1075
991
  #: components/ControlPanel/ClientsPanel
1076
992
  msgid "signing"
@@ -1141,9 +1057,9 @@ msgstr ""
1141
1057
  msgid "user-account-no-providers"
1142
1058
  msgstr ""
1143
1059
 
1144
- #. Default: "Where the value is written on the user's profile."
1145
- #: helpers/providerSchema
1146
- msgid "user-field-help"
1060
+ #. Default: "What this account is made of"
1061
+ #: components/ControlPanel/UserAccountPanel
1062
+ msgid "user-account-sections"
1147
1063
  msgstr ""
1148
1064
 
1149
1065
  #. Default: "verifying only"