@ory/elements-react 0.0.0-pr.e3d2b7e1 → 0.0.0-pr.f1d09ee2

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 (184) hide show
  1. package/CHANGELOG.md +224 -0
  2. package/DEVELOPMENT.md +19 -4
  3. package/README.md +253 -4
  4. package/babel.config.js +10 -0
  5. package/dist/client/frontendClient.d.mts +5 -2
  6. package/dist/client/frontendClient.d.ts +5 -2
  7. package/dist/client/frontendClient.js +25 -2
  8. package/dist/client/frontendClient.js.map +1 -1
  9. package/dist/client/frontendClient.mjs +25 -2
  10. package/dist/client/frontendClient.mjs.map +1 -1
  11. package/dist/client/index.js +3 -3
  12. package/dist/index.d.mts +60 -11
  13. package/dist/index.d.ts +60 -11
  14. package/dist/index.js +915 -346
  15. package/dist/index.js.map +1 -1
  16. package/dist/index.mjs +918 -350
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/theme/default/index.css +187 -125
  19. package/dist/theme/default/index.css.map +1 -1
  20. package/dist/theme/default/index.d.mts +31 -5
  21. package/dist/theme/default/index.d.ts +31 -5
  22. package/dist/theme/default/index.js +4279 -828
  23. package/dist/theme/default/index.js.map +1 -1
  24. package/dist/theme/default/index.mjs +4333 -804
  25. package/dist/theme/default/index.mjs.map +1 -1
  26. package/package.json +22 -15
  27. package/tailwind/generated/default-variables.css +1 -1
  28. package/tsconfig.json +3 -2
  29. package/.storybook/global.css +0 -7
  30. package/.storybook/main.ts +0 -50
  31. package/.storybook/preview-head.html +0 -15
  32. package/.storybook/preview.tsx +0 -68
  33. package/.storybook/public/InterVariable.woff2 +0 -0
  34. package/.storybook/public/inter.css +0 -8
  35. package/.stub-responses/login/1fa/all-methods/initial-form.json +0 -245
  36. package/.stub-responses/login/1fa/all-methods/missing-email.json +0 -263
  37. package/.stub-responses/login/1fa/all-methods/wrong-credentials.json +0 -252
  38. package/.stub-responses/login/1fa/code/code-input.json +0 -135
  39. package/.stub-responses/login/1fa/code/initial-form.json +0 -173
  40. package/.stub-responses/login/1fa/code/invalid-account.json +0 -182
  41. package/.stub-responses/login/1fa/code/missing-email.json +0 -182
  42. package/.stub-responses/login/1fa/code/wrong-credentials.json +0 -124
  43. package/.stub-responses/login/1fa/none/initial-form.json +0 -33
  44. package/.stub-responses/login/1fa/oidc/credential-select-password.json +0 -120
  45. package/.stub-responses/login/1fa/oidc/credential-select.json +0 -81
  46. package/.stub-responses/login/1fa/oidc/initial-form.json +0 -279
  47. package/.stub-responses/login/1fa/passkey/initial-form.json +0 -122
  48. package/.stub-responses/login/1fa/password/initial-form.json +0 -154
  49. package/.stub-responses/login/1fa/password/missing-email.json +0 -172
  50. package/.stub-responses/login/1fa/password/wrong-credentials.json +0 -163
  51. package/.stub-responses/login/1fa/webauthn/initial-form.json +0 -76
  52. package/.stub-responses/login/1fa/webauthn/invalid-account.json +0 -83
  53. package/.stub-responses/login/1fa/webauthn/show-trigger.json +0 -105
  54. package/.stub-responses/recovery/disabled/initial-form.json +0 -9
  55. package/.stub-responses/recovery/none/initial-form.json +0 -9
  56. package/.stub-responses/registration/one-step/all-methods/initial-form.json +0 -334
  57. package/.stub-responses/registration/one-step/all-methods/missing-fields.json +0 -343
  58. package/.stub-responses/registration/one-step/disabled/initial-form.json +0 -10
  59. package/.stub-responses/registration/one-step/none/initial-form.json +0 -14
  60. package/.stub-responses/registration/one-step/oidc/initial-form.json +0 -338
  61. package/.stub-responses/registration/one-step/passkey/initial-form.json +0 -177
  62. package/.stub-responses/registration/one-step/password/initial-form.json +0 -154
  63. package/.stub-responses/registration/one-step/password/missing-fields.json +0 -172
  64. package/.stub-responses/registration/one-step/password/second-step.json +0 -164
  65. package/.stub-responses/registration/one-step/webauthn/initial-form.json +0 -185
  66. package/.stub-responses/registration/two-step/all-methods/enter-password.json +0 -242
  67. package/.stub-responses/registration/two-step/all-methods/initial-form.json +0 -180
  68. package/.stub-responses/registration/two-step/all-methods/missing-fields.json +0 -189
  69. package/.stub-responses/registration/two-step/all-methods/password-validation-error.json +0 -244
  70. package/.stub-responses/registration/two-step/password/enter-password.json +0 -108
  71. package/.stub-responses/registration/two-step/password/initial-form.json +0 -134
  72. package/.stub-responses/registration/two-step/password/missing-fields.json +0 -143
  73. package/.stub-responses/registration/two-step/password/password-validation-error.json +0 -110
  74. package/.stub-responses/settings/all-methods/change-password.json +0 -381
  75. package/.stub-responses/settings/all-methods/change-trait.json +0 -377
  76. package/.stub-responses/settings/all-methods/initial-form.json +0 -368
  77. package/.stub-responses/settings/oidc/with-provider.json +0 -229
  78. package/.stub-responses/settings/passkey/initial-form.json +0 -256
  79. package/.stub-responses/settings/webauthn/initial-form.json +0 -263
  80. package/.stub-responses/verification/disabled/initial-form.json +0 -9
  81. package/.stub-responses/verification/none/initial-form.json +0 -9
  82. package/stories/components/login/1fa/all.stories.ts +0 -46
  83. package/stories/components/login/1fa/code.stories.ts +0 -64
  84. package/stories/components/login/1fa/custom.stories.tsx +0 -74
  85. package/stories/components/login/1fa/none.stories.tsx +0 -28
  86. package/stories/components/login/1fa/oidc.stories.tsx +0 -140
  87. package/stories/components/login/1fa/passkey.stories.ts +0 -28
  88. package/stories/components/login/1fa/password.stories.ts +0 -46
  89. package/stories/components/login/1fa/webauthn.stories.ts +0 -46
  90. package/stories/components/registration/one-step/all-methods.stories.ts +0 -37
  91. package/stories/components/registration/one-step/password.stories.ts +0 -37
  92. package/stories/components/registration/one-step/webauthn.stories.ts +0 -28
  93. package/stories/components/registration/two-step/all-methods.stories.ts +0 -55
  94. package/stories/components/registration/two-step/password.stories.ts +0 -55
  95. package/stories/components/settings/all.stories.ts +0 -46
  96. package/stories/components/settings/oidc.stories.ts +0 -28
  97. package/stories/components/settings/passkey.stories.ts +0 -28
  98. package/stories/components/settings/webauthn.stories.ts +0 -28
  99. package/stories/pages/error.tsx +0 -29
  100. package/stories/utils.ts +0 -20
  101. package/storybook-static/InterVariable.woff2 +0 -0
  102. package/storybook-static/assets/Color-ERTF36HU-BdkKyVuV.js +0 -1
  103. package/storybook-static/assets/DocsRenderer-CFRXHY34-YqKt61zP.js +0 -595
  104. package/storybook-static/assets/all-methods.stories-B-rqPBX2.js +0 -11
  105. package/storybook-static/assets/all-methods.stories-CmMlhzsx.js +0 -21
  106. package/storybook-static/assets/all.stories-CtQ0yCQi.js +0 -16
  107. package/storybook-static/assets/all.stories-DgIVCzcZ.js +0 -16
  108. package/storybook-static/assets/chunk-H6MOWX77-DTQOW814.js +0 -1
  109. package/storybook-static/assets/code.stories-BbEryDcA.js +0 -26
  110. package/storybook-static/assets/custom.stories-DH2zHar9.js +0 -6
  111. package/storybook-static/assets/entry-preview-CcFGVifh.js +0 -10
  112. package/storybook-static/assets/entry-preview-docs-CyY-8bLe.js +0 -54
  113. package/storybook-static/assets/iframe-C5GAfuxh.js +0 -2
  114. package/storybook-static/assets/index-BVoBHvaS.js +0 -8
  115. package/storybook-static/assets/index-CfOt2XX2.js +0 -24
  116. package/storybook-static/assets/index-DPRSEdy-.js +0 -1
  117. package/storybook-static/assets/index-DrFu-skq.js +0 -6
  118. package/storybook-static/assets/index-FeUjBnvO.js +0 -1
  119. package/storybook-static/assets/index-uubelm5h.js +0 -9
  120. package/storybook-static/assets/initial-form-DWp_1F-f.js +0 -1
  121. package/storybook-static/assets/jsx-runtime-QvZ8i92b.js +0 -9
  122. package/storybook-static/assets/none.stories-TAeRhzd5.js +0 -6
  123. package/storybook-static/assets/oidc.stories-CniWBy7t.js +0 -58
  124. package/storybook-static/assets/oidc.stories-jhWzAyoQ.js +0 -6
  125. package/storybook-static/assets/passkey.stories-CBtjoVSN.js +0 -6
  126. package/storybook-static/assets/passkey.stories-CQU2Xw_t.js +0 -6
  127. package/storybook-static/assets/password.stories-0s6cDl0o.js +0 -11
  128. package/storybook-static/assets/password.stories-B2Wtckz_.js +0 -16
  129. package/storybook-static/assets/password.stories-DX0gkWjH.js +0 -21
  130. package/storybook-static/assets/preview-BBWR9nbA.js +0 -1
  131. package/storybook-static/assets/preview-BPAmP-pY.js +0 -2
  132. package/storybook-static/assets/preview-BWzBA1C2.js +0 -396
  133. package/storybook-static/assets/preview-BXtF2ySE.js +0 -234
  134. package/storybook-static/assets/preview-Cur_8nCX.css +0 -1
  135. package/storybook-static/assets/preview-D77C14du.js +0 -34
  136. package/storybook-static/assets/preview-DCjDUH0w.js +0 -27
  137. package/storybook-static/assets/preview-DFmD0pui.js +0 -1
  138. package/storybook-static/assets/preview-DGUiP6tS.js +0 -7
  139. package/storybook-static/assets/preview-aVwhiz9X.js +0 -1
  140. package/storybook-static/assets/react-18-CtsMCmcS.js +0 -1
  141. package/storybook-static/assets/settings-BqEFC2-V.css +0 -1
  142. package/storybook-static/assets/settings-Bx4osEmB.js +0 -2304
  143. package/storybook-static/assets/webauthn.stories-BzodmV0c.js +0 -6
  144. package/storybook-static/assets/webauthn.stories-DglGm7Ys.js +0 -6
  145. package/storybook-static/assets/webauthn.stories-G9E76Wjj.js +0 -16
  146. package/storybook-static/favicon.svg +0 -1
  147. package/storybook-static/iframe.html +0 -654
  148. package/storybook-static/index.html +0 -173
  149. package/storybook-static/index.json +0 -1
  150. package/storybook-static/inter.css +0 -8
  151. package/storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  152. package/storybook-static/nunito-sans-bold.woff2 +0 -0
  153. package/storybook-static/nunito-sans-italic.woff2 +0 -0
  154. package/storybook-static/nunito-sans-regular.woff2 +0 -0
  155. package/storybook-static/preview-stats.json +0 -2344
  156. package/storybook-static/sb-addons/essentials-actions-2/manager-bundle.js +0 -3
  157. package/storybook-static/sb-addons/essentials-actions-2/manager-bundle.js.LEGAL.txt +0 -0
  158. package/storybook-static/sb-addons/essentials-backgrounds-3/manager-bundle.js +0 -12
  159. package/storybook-static/sb-addons/essentials-backgrounds-3/manager-bundle.js.LEGAL.txt +0 -0
  160. package/storybook-static/sb-addons/essentials-controls-1/manager-bundle.js +0 -394
  161. package/storybook-static/sb-addons/essentials-controls-1/manager-bundle.js.LEGAL.txt +0 -0
  162. package/storybook-static/sb-addons/essentials-measure-6/manager-bundle.js +0 -3
  163. package/storybook-static/sb-addons/essentials-measure-6/manager-bundle.js.LEGAL.txt +0 -0
  164. package/storybook-static/sb-addons/essentials-outline-7/manager-bundle.js +0 -3
  165. package/storybook-static/sb-addons/essentials-outline-7/manager-bundle.js.LEGAL.txt +0 -0
  166. package/storybook-static/sb-addons/essentials-toolbars-5/manager-bundle.js +0 -3
  167. package/storybook-static/sb-addons/essentials-toolbars-5/manager-bundle.js.LEGAL.txt +0 -0
  168. package/storybook-static/sb-addons/essentials-viewport-4/manager-bundle.js +0 -3
  169. package/storybook-static/sb-addons/essentials-viewport-4/manager-bundle.js.LEGAL.txt +0 -0
  170. package/storybook-static/sb-addons/interactions-8/manager-bundle.js +0 -211
  171. package/storybook-static/sb-addons/interactions-8/manager-bundle.js.LEGAL.txt +0 -0
  172. package/storybook-static/sb-addons/storybook-core-core-server-presets-0/common-manager-bundle.js +0 -3
  173. package/storybook-static/sb-addons/storybook-core-core-server-presets-0/common-manager-bundle.js.LEGAL.txt +0 -0
  174. package/storybook-static/sb-common-assets/favicon.svg +0 -1
  175. package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  176. package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  177. package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  178. package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  179. package/storybook-static/sb-manager/globals-module-info.js +0 -1006
  180. package/storybook-static/sb-manager/globals-runtime.js +0 -54400
  181. package/storybook-static/sb-manager/globals.js +0 -48
  182. package/storybook-static/sb-manager/runtime.js +0 -12089
  183. package/storybook-static/sb-preview/globals.js +0 -33
  184. package/storybook-static/sb-preview/runtime.js +0 -9498
package/dist/index.js CHANGED
@@ -36,10 +36,14 @@ function useGroupSorter() {
36
36
  }
37
37
  var defaultNodeOrder = [
38
38
  "oidc",
39
+ "saml",
39
40
  "identifier_first",
40
41
  "default",
41
42
  "profile",
42
43
  "password",
44
+ // CAPTCHA is below password because otherwise the password input field
45
+ // would be above the captcha. Somehow, we sort the password sign up button somewhere else to be always at the bottom.
46
+ "captcha",
43
47
  "passkey",
44
48
  "code",
45
49
  "webauthn"
@@ -48,6 +52,11 @@ function defaultNodeSorter(a, b) {
48
52
  var _a, _b;
49
53
  const aGroupWeight = (_a = defaultNodeOrder.indexOf(a.group)) != null ? _a : 999;
50
54
  const bGroupWeight = (_b = defaultNodeOrder.indexOf(b.group)) != null ? _b : 999;
55
+ if (b.group === "captcha" && clientFetch.isUiNodeInputAttributes(a.attributes) && a.attributes.type === "submit") {
56
+ return aGroupWeight - (bGroupWeight - 2);
57
+ } else if (a.group === "captcha" && clientFetch.isUiNodeInputAttributes(b.attributes) && b.attributes.type === "submit") {
58
+ return aGroupWeight - 2 - bGroupWeight;
59
+ }
51
60
  return aGroupWeight - bGroupWeight;
52
61
  }
53
62
  var defaultGroupOrder = [
@@ -85,25 +94,10 @@ function OryComponentProvider({
85
94
  }
86
95
  );
87
96
  }
88
- function isChoosingMethod(uiNodes) {
89
- return uiNodes.some(
90
- (node) => "name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous"
91
- ) || uiNodes.some(
92
- (node) => node.group === clientFetch.UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
93
- );
94
- }
95
- function filterOidcOut(nodes) {
96
- return nodes.filter((node) => node.group !== clientFetch.UiNodeGroupEnum.Oidc);
97
- }
98
- function getFinalNodes(uniqueGroups, selectedGroup) {
99
- var _a, _b, _c;
100
- const selectedNodes = selectedGroup ? (_a = uniqueGroups[selectedGroup]) != null ? _a : [] : [];
101
- return [
102
- ...(_b = uniqueGroups == null ? void 0 : uniqueGroups.identifier_first) != null ? _b : [],
103
- ...(_c = uniqueGroups == null ? void 0 : uniqueGroups.default) != null ? _c : []
104
- ].flat().filter(
105
- (node) => "type" in node.attributes && node.attributes.type === "hidden"
106
- ).concat(selectedNodes);
97
+
98
+ // src/theme/default/utils/form.ts
99
+ function isGroupImmediateSubmit(group) {
100
+ return group === "code";
107
101
  }
108
102
  function triggerToWindowCall(trigger) {
109
103
  if (!trigger) {
@@ -172,25 +166,37 @@ function nodesToAuthMethodGroups(nodes, excludeAuthMethods = []) {
172
166
  clientFetch.UiNodeGroupEnum.Default,
173
167
  clientFetch.UiNodeGroupEnum.IdentifierFirst,
174
168
  clientFetch.UiNodeGroupEnum.Profile,
169
+ clientFetch.UiNodeGroupEnum.Captcha,
175
170
  ...excludeAuthMethods
176
171
  ].includes(group)
177
172
  );
178
173
  }
179
- function useNodesGroups(nodes) {
174
+ function useNodesGroups(nodes, { omit } = {}) {
180
175
  const groupSorter = useGroupSorter();
181
176
  const groups = react.useMemo(() => {
182
- var _a;
177
+ var _a, _b;
183
178
  const groups2 = {};
179
+ const groupRetained = {};
184
180
  for (const node of nodes) {
185
- if (node.type === "script") {
186
- continue;
187
- }
188
181
  const groupNodes = (_a = groups2[node.group]) != null ? _a : [];
189
182
  groupNodes.push(node);
190
183
  groups2[node.group] = groupNodes;
184
+ if ((omit == null ? void 0 : omit.includes("script")) && clientFetch.isUiNodeScriptAttributes(node.attributes)) {
185
+ continue;
186
+ }
187
+ if ((omit == null ? void 0 : omit.includes("input_hidden")) && clientFetch.isUiNodeInputAttributes(node.attributes) && node.attributes.type === "hidden") {
188
+ continue;
189
+ }
190
+ groupRetained[node.group] = ((_b = groupRetained[node.group]) != null ? _b : 0) + 1;
191
191
  }
192
- return groups2;
193
- }, [nodes]);
192
+ const finalGroups = {};
193
+ for (const [group, count] of Object.entries(groupRetained)) {
194
+ if (count > 0) {
195
+ finalGroups[group] = groups2[group];
196
+ }
197
+ }
198
+ return finalGroups;
199
+ }, [nodes, omit]);
194
200
  const entries = react.useMemo(
195
201
  () => Object.entries(groups).sort(([a], [b]) => groupSorter(a, b)),
196
202
  [groups, groupSorter]
@@ -200,6 +206,96 @@ function useNodesGroups(nodes) {
200
206
  entries
201
207
  };
202
208
  }
209
+ var findNode = (nodes, opt) => nodes.find((n) => {
210
+ return n.attributes.node_type === opt.node_type && (opt.group instanceof RegExp ? n.group.match(opt.group) : n.group === opt.group) && (opt.name && n.attributes.node_type === "input" ? opt.name instanceof RegExp ? n.attributes.name.match(opt.name) : n.attributes.name === opt.name : !opt.name);
211
+ });
212
+ function useFunctionalNodes(nodes) {
213
+ return nodes.filter(
214
+ ({ group }) => [
215
+ clientFetch.UiNodeGroupEnum.Default,
216
+ clientFetch.UiNodeGroupEnum.IdentifierFirst,
217
+ clientFetch.UiNodeGroupEnum.Profile,
218
+ clientFetch.UiNodeGroupEnum.Captcha
219
+ ].includes(group)
220
+ );
221
+ }
222
+ function isUiNodeGroupEnum(method) {
223
+ return Object.values(clientFetch.UiNodeGroupEnum).includes(method);
224
+ }
225
+ function isSingleSignOnNode(node) {
226
+ return node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml;
227
+ }
228
+ function hasSingleSignOnNodes(nodes) {
229
+ return nodes.some(isSingleSignOnNode);
230
+ }
231
+ function withoutSingleSignOnNodes(nodes) {
232
+ return nodes.filter((node) => !isSingleSignOnNode(node));
233
+ }
234
+ function isNodeVisible(node) {
235
+ if (clientFetch.isUiNodeScriptAttributes(node.attributes)) {
236
+ return false;
237
+ } else if (clientFetch.isUiNodeInputAttributes(node.attributes)) {
238
+ if (node.attributes.type === "hidden") {
239
+ return false;
240
+ }
241
+ }
242
+ return true;
243
+ }
244
+ function useNodeGroupsWithVisibleNodes(nodes) {
245
+ return react.useMemo(() => {
246
+ var _a, _b;
247
+ const groups = {};
248
+ const groupRetained = {};
249
+ for (const node of nodes) {
250
+ const groupNodes = (_a = groups[node.group]) != null ? _a : [];
251
+ const groupCount = (_b = groupRetained[node.group]) != null ? _b : 0;
252
+ groupNodes.push(node);
253
+ groups[node.group] = groupNodes;
254
+ if (!isNodeVisible(node)) {
255
+ continue;
256
+ }
257
+ groupRetained[node.group] = groupCount + 1;
258
+ }
259
+ const finalGroups = {};
260
+ for (const [group, count] of Object.entries(groupRetained)) {
261
+ if (count > 0) {
262
+ finalGroups[group] = groups[group];
263
+ }
264
+ }
265
+ return finalGroups;
266
+ }, [nodes]);
267
+ }
268
+
269
+ // src/components/card/two-step/utils.ts
270
+ function isChoosingMethod(flow) {
271
+ return flow.flow.ui.nodes.some(
272
+ (node) => "name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous"
273
+ ) || flow.flow.ui.nodes.some(
274
+ (node) => node.group === clientFetch.UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
275
+ ) || flow.flowType === clientFetch.FlowType.Login && flow.flow.requested_aal === "aal2";
276
+ }
277
+ function getFinalNodes(uniqueGroups, selectedGroup) {
278
+ var _a, _b, _c, _d;
279
+ const selectedNodes = selectedGroup ? (_a = uniqueGroups[selectedGroup]) != null ? _a : [] : [];
280
+ return [
281
+ ...(_b = uniqueGroups == null ? void 0 : uniqueGroups.identifier_first) != null ? _b : [],
282
+ ...(_c = uniqueGroups == null ? void 0 : uniqueGroups.default) != null ? _c : [],
283
+ ...(_d = uniqueGroups == null ? void 0 : uniqueGroups.captcha) != null ? _d : []
284
+ ].flat().filter(
285
+ (node) => "type" in node.attributes && node.attributes.type === "hidden"
286
+ ).concat(selectedNodes);
287
+ }
288
+ var handleAfterFormSubmit = (dispatchFormState) => (method) => {
289
+ if (typeof method !== "string" || !isUiNodeGroupEnum(method)) {
290
+ return;
291
+ }
292
+ if (isGroupImmediateSubmit(method)) {
293
+ dispatchFormState({
294
+ type: "action_select_method",
295
+ method
296
+ });
297
+ }
298
+ };
203
299
 
204
300
  // src/context/form-state.ts
205
301
  function findMethodWithMessage(nodes) {
@@ -221,9 +317,11 @@ function parseStateFromFlow(flow) {
221
317
  return { current: "method_active", method: "code" };
222
318
  } else if (methodWithMessage) {
223
319
  return { current: "method_active", method: methodWithMessage.group };
224
- } else if (flow.flow.active && !["default", "identifier_first", "oidc"].includes(flow.flow.active)) {
320
+ } else if (flow.flow.active && !["default", "identifier_first", "oidc", "saml"].includes(
321
+ flow.flow.active
322
+ )) {
225
323
  return { current: "method_active", method: flow.flow.active };
226
- } else if (isChoosingMethod(flow.flow.ui.nodes)) {
324
+ } else if (isChoosingMethod(flow)) {
227
325
  const authMethods = nodesToAuthMethodGroups(flow.flow.ui.nodes);
228
326
  if (authMethods.length === 1 && authMethods[0] !== "code") {
229
327
  return { current: "method_active", method: authMethods[0] };
@@ -245,23 +343,32 @@ function parseStateFromFlow(flow) {
245
343
  break;
246
344
  case clientFetch.FlowType.Settings:
247
345
  return { current: "settings" };
346
+ case clientFetch.FlowType.OAuth2Consent:
347
+ return { current: "method_active", method: "oauth2_consent" };
248
348
  }
249
349
  console.warn(
250
350
  `[Ory/Elements React] Encountered an unknown form state on ${flow.flowType} flow with ID ${flow.flow.id}`
251
351
  );
252
352
  throw new Error("Unknown form state");
253
353
  }
254
- function formStateReducer(state, action) {
255
- switch (action.type) {
256
- case "action_flow_update":
257
- return parseStateFromFlow(action.flow);
258
- case "action_select_method":
259
- return { current: "method_active", method: action.method };
260
- }
261
- return state;
262
- }
263
354
  function useFormStateReducer(flow) {
264
- return react.useReducer(formStateReducer, parseStateFromFlow(flow));
355
+ const action = parseStateFromFlow(flow);
356
+ const [selectedMethod, setSelectedMethod] = react.useState();
357
+ const formStateReducer = (state, action2) => {
358
+ switch (action2.type) {
359
+ case "action_flow_update": {
360
+ if (selectedMethod)
361
+ return { current: "method_active", method: selectedMethod };
362
+ return parseStateFromFlow(action2.flow);
363
+ }
364
+ case "action_select_method": {
365
+ setSelectedMethod(action2.method);
366
+ return { current: "method_active", method: action2.method };
367
+ }
368
+ }
369
+ return state;
370
+ };
371
+ return react.useReducer(formStateReducer, action);
265
372
  }
266
373
  function useOryFlow() {
267
374
  const ctx = react.useContext(OryFlowContext);
@@ -351,6 +458,22 @@ function computeDefaultValues(nodes) {
351
458
  if (attrs.name === "method" || attrs.type === "submit" || typeof attrs.value === "undefined") {
352
459
  return acc;
353
460
  }
461
+ if (attrs.name.startsWith("grant_scope")) {
462
+ const scope = attrs.value;
463
+ if (Array.isArray(acc.grant_scope)) {
464
+ return {
465
+ ...acc,
466
+ // We want to have all scopes accepted by default, so that the user has to actively uncheck them.
467
+ grant_scope: [...acc.grant_scope, scope]
468
+ };
469
+ } else if (!acc.grant_scope) {
470
+ return {
471
+ ...acc,
472
+ grant_scope: [scope]
473
+ };
474
+ }
475
+ return acc;
476
+ }
354
477
  return unrollTrait(
355
478
  {
356
479
  name: attrs.name,
@@ -438,11 +561,6 @@ function OryCardContent({ children }) {
438
561
  const { Card } = useComponents();
439
562
  return /* @__PURE__ */ jsxRuntime.jsx(Card.Content, { children });
440
563
  }
441
-
442
- // src/theme/default/utils/form.ts
443
- function isGroupImmediateSubmit(group) {
444
- return group === "code";
445
- }
446
564
  function frontendClient(sdkUrl, opts = {}) {
447
565
  const config = new clientFetch.Configuration({
448
566
  ...opts,
@@ -782,7 +900,7 @@ function useOryFormSubmit(onAfterSubmit) {
782
900
  if ("lookup_secret_confirm" in submitData || "lookup_secret_reveal" in submitData || "lookup_secret_regenerate" in submitData || "lookup_secret_disable" in submitData) {
783
901
  submitData.method = "lookup_secret";
784
902
  }
785
- if (submitData.method === "oidc" && submitData.link && supportsSelectAccountPrompt.includes(submitData.link)) {
903
+ if (submitData.method === clientFetch.UiNodeGroupEnum.Oidc && submitData.link && supportsSelectAccountPrompt.includes(submitData.link)) {
786
904
  submitData.upstream_parameters = {
787
905
  prompt: "select_account"
788
906
  };
@@ -800,6 +918,19 @@ function useOryFormSubmit(onAfterSubmit) {
800
918
  });
801
919
  break;
802
920
  }
921
+ case clientFetch.FlowType.OAuth2Consent: {
922
+ const response = await fetch(flowContainer.flow.ui.action, {
923
+ method: "POST",
924
+ body: JSON.stringify(data),
925
+ headers: {
926
+ "Content-Type": "application/json"
927
+ }
928
+ });
929
+ const oauth2Success = await response.json();
930
+ if (oauth2Success.redirect_to && typeof oauth2Success.redirect_to === "string") {
931
+ onRedirect(oauth2Success.redirect_to);
932
+ }
933
+ }
803
934
  }
804
935
  if ("password" in data) {
805
936
  methods.setValue("password", "");
@@ -814,15 +945,22 @@ function useOryFormSubmit(onAfterSubmit) {
814
945
  };
815
946
  return onSubmit;
816
947
  }
817
- function OryForm({ children, onAfterSubmit }) {
818
- var _a;
948
+ function OryForm({
949
+ children,
950
+ onAfterSubmit,
951
+ "data-testid": dataTestId
952
+ }) {
819
953
  const { Form } = useComponents();
820
954
  const flowContainer = useOryFlow();
821
955
  const methods = reactHookForm.useFormContext();
956
+ const { Message } = useComponents();
822
957
  const intl = reactIntl.useIntl();
823
958
  const onSubmit = useOryFormSubmit(onAfterSubmit);
824
959
  const hasMethods = flowContainer.flow.ui.nodes.some((node) => {
825
960
  if (clientFetch.isUiNodeInputAttributes(node.attributes)) {
961
+ if (node.attributes.type === "hidden") {
962
+ return false;
963
+ }
826
964
  return node.attributes.name !== "csrf_token";
827
965
  } else if (clientFetch.isUiNodeAnchorAttributes(node.attributes)) {
828
966
  return true;
@@ -833,15 +971,24 @@ function OryForm({ children, onAfterSubmit }) {
833
971
  }
834
972
  return false;
835
973
  });
836
- if (!hasMethods && ((_a = flowContainer.flow.ui.messages) != null ? _a : []).length === 0) {
837
- return intl.formatMessage({
838
- id: `identities.messages.${5000002}`,
839
- defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
840
- });
974
+ if (!hasMethods) {
975
+ const m = {
976
+ id: 5000002,
977
+ text: intl.formatMessage({
978
+ id: `identities.messages.${5000002}`,
979
+ defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
980
+ }),
981
+ type: "error"
982
+ };
983
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": dataTestId, children: /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: m }, m.id) }) });
984
+ }
985
+ if ((flowContainer.flowType === clientFetch.FlowType.Login || flowContainer.flowType === clientFetch.FlowType.Registration) && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
986
+ methods.setValue("method", "code");
841
987
  }
842
988
  return /* @__PURE__ */ jsxRuntime.jsx(
843
989
  Form.Root,
844
990
  {
991
+ "data-testid": dataTestId,
845
992
  action: flowContainer.flow.ui.action,
846
993
  method: flowContainer.flow.ui.method,
847
994
  onSubmit: (e) => void methods.handleSubmit(onSubmit)(e),
@@ -849,7 +996,15 @@ function OryForm({ children, onAfterSubmit }) {
849
996
  }
850
997
  );
851
998
  }
852
- var messageIdsToHide = [1040009, 1060003, 1080003, 1010014, 1040005, 1010016];
999
+ var messageIdsToHide = [
1000
+ 1040009,
1001
+ 1060003,
1002
+ 1080003,
1003
+ 1010004,
1004
+ 1010014,
1005
+ 1040005,
1006
+ 1010016
1007
+ ];
853
1008
  function OryCardValidationMessages({ ...props }) {
854
1009
  var _a;
855
1010
  const { flow } = useOryFlow();
@@ -868,7 +1023,7 @@ var NodeInput = ({
868
1023
  }) => {
869
1024
  var _a;
870
1025
  const { Node: Node2 } = useComponents();
871
- const { setValue } = reactHookForm.useFormContext();
1026
+ const { setValue, watch } = reactHookForm.useFormContext();
872
1027
  const {
873
1028
  onloadTrigger,
874
1029
  onclickTrigger,
@@ -881,7 +1036,7 @@ var NodeInput = ({
881
1036
  const isResendNode = ((_a = node.meta.label) == null ? void 0 : _a.id) === 1070008;
882
1037
  const isScreenSelectionNode = "name" in node.attributes && node.attributes.name === "screen";
883
1038
  const setFormValue = () => {
884
- if (attrs.value && !(isResendNode || isScreenSelectionNode)) {
1039
+ if (attrs.value && !(isResendNode || isScreenSelectionNode || node.group === clientFetch.UiNodeGroupEnum.Oauth2Consent)) {
885
1040
  setValue(attrs.name, attrs.value);
886
1041
  }
887
1042
  };
@@ -904,8 +1059,21 @@ var NodeInput = ({
904
1059
  triggerToWindowCall(onclickTrigger);
905
1060
  }
906
1061
  };
907
- const isSocial = (attrs.name === "provider" || attrs.name === "link") && node.group === "oidc";
1062
+ const isSocial = (attrs.name === "provider" || attrs.name === "link") && (node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml);
908
1063
  const isPinCodeInput = attrs.name === "code" && node.group === "code" || attrs.name === "totp_code" && node.group === "totp";
1064
+ const handleScopeChange = (checked) => {
1065
+ const scopes = watch("grant_scope");
1066
+ if (Array.isArray(scopes)) {
1067
+ if (checked) {
1068
+ setValue("grant_scope", Array.from(/* @__PURE__ */ new Set([...scopes, attrs.value])));
1069
+ } else {
1070
+ setValue(
1071
+ "grant_scope",
1072
+ scopes.filter((scope) => scope !== attrs.value)
1073
+ );
1074
+ }
1075
+ }
1076
+ };
909
1077
  switch (attributes.type) {
910
1078
  case clientFetch.UiNodeInputAttributesTypeEnum.Submit:
911
1079
  case clientFetch.UiNodeInputAttributesTypeEnum.Button:
@@ -915,6 +1083,9 @@ var NodeInput = ({
915
1083
  if (isResendNode || isScreenSelectionNode) {
916
1084
  return null;
917
1085
  }
1086
+ if (node.group === "oauth2_consent") {
1087
+ return null;
1088
+ }
918
1089
  return /* @__PURE__ */ jsxRuntime.jsx(
919
1090
  Node2.Label,
920
1091
  {
@@ -926,6 +1097,21 @@ var NodeInput = ({
926
1097
  case clientFetch.UiNodeInputAttributesTypeEnum.DatetimeLocal:
927
1098
  throw new Error("Not implemented");
928
1099
  case clientFetch.UiNodeInputAttributesTypeEnum.Checkbox:
1100
+ if (node.group === "oauth2_consent" && node.attributes.node_type === "input") {
1101
+ switch (node.attributes.name) {
1102
+ case "grant_scope":
1103
+ return /* @__PURE__ */ jsxRuntime.jsx(
1104
+ Node2.ConsentScopeCheckbox,
1105
+ {
1106
+ attributes: attrs,
1107
+ node,
1108
+ onCheckedChange: handleScopeChange
1109
+ }
1110
+ );
1111
+ default:
1112
+ return null;
1113
+ }
1114
+ }
929
1115
  return /* @__PURE__ */ jsxRuntime.jsx(
930
1116
  Node2.Label,
931
1117
  {
@@ -952,6 +1138,9 @@ var NodeInput = ({
952
1138
  };
953
1139
  var Node = ({ node, onClick }) => {
954
1140
  const { Node: Node2 } = useComponents();
1141
+ if (node.group === clientFetch.UiNodeGroupEnum.Captcha) {
1142
+ return /* @__PURE__ */ jsxRuntime.jsx(Node2.Captcha, { node });
1143
+ }
955
1144
  if (clientFetch.isUiNodeImageAttributes(node.attributes)) {
956
1145
  return /* @__PURE__ */ jsxRuntime.jsx(Node2.Image, { node, attributes: node.attributes });
957
1146
  } else if (clientFetch.isUiNodeTextAttributes(node.attributes)) {
@@ -984,12 +1173,14 @@ function OryFormOidcButtons() {
984
1173
  flow: { ui }
985
1174
  } = useOryFlow();
986
1175
  const { setValue } = reactHookForm.useFormContext();
987
- const filteredNodes = ui.nodes.filter((node) => node.group === "oidc");
1176
+ const filteredNodes = ui.nodes.filter(
1177
+ (node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
1178
+ );
988
1179
  const { Form, Node: Node2 } = useComponents();
989
1180
  if (filteredNodes.length === 0) {
990
1181
  return null;
991
1182
  }
992
- return /* @__PURE__ */ jsxRuntime.jsx(Form.OidcRoot, { nodes: filteredNodes, children: filteredNodes.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(
1183
+ return /* @__PURE__ */ jsxRuntime.jsx(Form.OidcRoot, { nodes: filteredNodes, children: filteredNodes.map((node) => /* @__PURE__ */ jsxRuntime.jsx(
993
1184
  Node2.OidcButton,
994
1185
  {
995
1186
  node,
@@ -999,114 +1190,217 @@ function OryFormOidcButtons() {
999
1190
  "provider",
1000
1191
  node.attributes.value
1001
1192
  );
1002
- setValue("method", "oidc");
1193
+ setValue("method", node.group);
1003
1194
  }
1004
1195
  },
1005
- k
1196
+ clientFetch.getNodeId(node)
1006
1197
  )) });
1007
1198
  }
1008
1199
  function OryFormSocialButtonsForm() {
1009
1200
  const {
1010
1201
  flow: { ui }
1011
1202
  } = useOryFlow();
1012
- const filteredNodes = ui.nodes.filter((node) => node.group === "oidc");
1203
+ const filteredNodes = ui.nodes.filter(
1204
+ (node) => node.group === clientFetch.UiNodeGroupEnum.Saml || node.group === clientFetch.UiNodeGroupEnum.Oidc
1205
+ );
1013
1206
  if (filteredNodes.length === 0) {
1014
1207
  return null;
1015
1208
  }
1016
- return /* @__PURE__ */ jsxRuntime.jsx(OryFormProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(OryForm, { children: /* @__PURE__ */ jsxRuntime.jsx(OryFormOidcButtons, {}) }) });
1209
+ return /* @__PURE__ */ jsxRuntime.jsx(OryFormProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(OryForm, { "data-testid": `ory/form/methods/oidc-saml`, children: /* @__PURE__ */ jsxRuntime.jsx(OryFormOidcButtons, {}) }) });
1017
1210
  }
1018
- function isUINodeGroupEnum(method) {
1019
- return Object.values(clientFetch.UiNodeGroupEnum).includes(method);
1211
+ function OryTwoStepCardStateMethodActive({
1212
+ formState
1213
+ }) {
1214
+ const { Form } = useComponents();
1215
+ const { flow, flowType, dispatchFormState } = useOryFlow();
1216
+ const { ui } = flow;
1217
+ const nodeSorter = useNodeSorter();
1218
+ const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1219
+ const groupsToShow = useNodeGroupsWithVisibleNodes(ui.nodes);
1220
+ const finalNodes = getFinalNodes(groupsToShow, formState.method);
1221
+ const selectedMethodIsSocial = formState.method === clientFetch.UiNodeGroupEnum.Oidc || formState.method === clientFetch.UiNodeGroupEnum.Saml;
1222
+ return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1223
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1224
+ /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1225
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1226
+ selectedMethodIsSocial && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1227
+ /* @__PURE__ */ jsxRuntime.jsx(
1228
+ OryForm,
1229
+ {
1230
+ "data-testid": `ory/form/methods/local`,
1231
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1232
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1233
+ ui.nodes.filter(
1234
+ (n) => clientFetch.isUiNodeScriptAttributes(n.attributes) || n.group === clientFetch.UiNodeGroupEnum.Captcha || n.group === clientFetch.UiNodeGroupEnum.Default || n.group === clientFetch.UiNodeGroupEnum.Profile
1235
+ ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1236
+ finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1237
+ ] })
1238
+ }
1239
+ )
1240
+ ] }),
1241
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1242
+ ] });
1020
1243
  }
1021
- function OryTwoStepCard() {
1022
- const {
1023
- flow: { ui },
1024
- flowType,
1025
- formState,
1026
- dispatchFormState
1027
- } = useOryFlow();
1244
+ function OryTwoStepCardStateProvideIdentifier() {
1028
1245
  const { Form, Card } = useComponents();
1246
+ const { flowType, flow, dispatchFormState } = useOryFlow();
1029
1247
  const nodeSorter = useNodeSorter();
1030
1248
  const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1031
- const uniqueGroups = useNodesGroups(ui.nodes);
1032
- const options = Object.values(clientFetch.UiNodeGroupEnum).filter((group) => {
1033
- var _a;
1034
- return (_a = uniqueGroups.groups[group]) == null ? void 0 : _a.length;
1035
- }).filter(
1036
- (group) => ![
1037
- clientFetch.UiNodeGroupEnum.Oidc,
1038
- clientFetch.UiNodeGroupEnum.Default,
1039
- clientFetch.UiNodeGroupEnum.IdentifierFirst,
1040
- clientFetch.UiNodeGroupEnum.Profile
1041
- ].includes(group)
1249
+ const nonSsoNodes = withoutSingleSignOnNodes(flow.ui.nodes).sort(sortNodes);
1250
+ const hasSso = flow.ui.nodes.filter(isNodeVisible).some(
1251
+ (node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
1042
1252
  );
1043
- const nonOidcNodes = filterOidcOut(ui.nodes);
1044
- const finalNodes = formState.current === "method_active" ? getFinalNodes(uniqueGroups.groups, formState.method) : [];
1045
- const handleAfterFormSubmit = (method) => {
1046
- if (typeof method !== "string" || !isUINodeGroupEnum(method)) {
1047
- return;
1253
+ const showSsoDivider = hasSso && nonSsoNodes.some(isNodeVisible);
1254
+ return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1255
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1256
+ /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1257
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1258
+ /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1259
+ /* @__PURE__ */ jsxRuntime.jsx(
1260
+ OryForm,
1261
+ {
1262
+ "data-testid": `ory/form/methods/local`,
1263
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1264
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1265
+ showSsoDivider && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1266
+ nonSsoNodes.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1267
+ ] })
1268
+ }
1269
+ )
1270
+ ] }),
1271
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1272
+ ] });
1273
+ }
1274
+ function AuthMethodList({
1275
+ options,
1276
+ setSelectedGroup
1277
+ }) {
1278
+ const { Card } = useComponents();
1279
+ const { setValue, getValues } = reactHookForm.useFormContext();
1280
+ if (Object.entries(options).length === 0) {
1281
+ return null;
1282
+ }
1283
+ const handleClick = (group, options2) => {
1284
+ var _a, _b, _c, _d;
1285
+ if (isGroupImmediateSubmit(group)) {
1286
+ if (group === "code" && !getValues("identifier") && ((_b = (_a = options2 == null ? void 0 : options2.title) == null ? void 0 : _a.values) == null ? void 0 : _b.address)) {
1287
+ setValue("identifier", (_d = (_c = options2 == null ? void 0 : options2.title) == null ? void 0 : _c.values) == null ? void 0 : _d.address);
1288
+ }
1289
+ setValue("method", group);
1290
+ } else {
1291
+ setSelectedGroup(group);
1048
1292
  }
1049
- if (isGroupImmediateSubmit(method)) {
1050
- dispatchFormState({
1051
- type: "action_select_method",
1052
- method
1053
- });
1293
+ };
1294
+ return /* @__PURE__ */ jsxRuntime.jsx(Card.AuthMethodListContainer, { children: Object.entries(options).map(([group, options2]) => /* @__PURE__ */ jsxRuntime.jsx(
1295
+ Card.AuthMethodListItem,
1296
+ {
1297
+ group,
1298
+ title: options2.title,
1299
+ onClick: () => handleClick(group, options2)
1300
+ },
1301
+ group
1302
+ )) });
1303
+ }
1304
+ function toAuthMethodPickerOptions(visibleGroups) {
1305
+ return Object.fromEntries(
1306
+ Object.values(clientFetch.UiNodeGroupEnum).filter((group) => {
1307
+ var _a;
1308
+ return (_a = visibleGroups[group]) == null ? void 0 : _a.length;
1309
+ }).filter(
1310
+ (group) => ![
1311
+ clientFetch.UiNodeGroupEnum.Oidc,
1312
+ clientFetch.UiNodeGroupEnum.Saml,
1313
+ clientFetch.UiNodeGroupEnum.Default,
1314
+ clientFetch.UiNodeGroupEnum.IdentifierFirst,
1315
+ clientFetch.UiNodeGroupEnum.Profile,
1316
+ clientFetch.UiNodeGroupEnum.Captcha
1317
+ ].includes(group)
1318
+ ).map((g) => [g, {}])
1319
+ );
1320
+ }
1321
+ function OryTwoStepCardStateSelectMethod() {
1322
+ var _a, _b, _c, _d;
1323
+ const { Form, Card, Message } = useComponents();
1324
+ const { flow, flowType, dispatchFormState } = useOryFlow();
1325
+ const { ui } = flow;
1326
+ const intl = reactIntl.useIntl();
1327
+ const nodeSorter = useNodeSorter();
1328
+ const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1329
+ const visibleGroups = useNodeGroupsWithVisibleNodes(ui.nodes);
1330
+ const authMethodBlocks = toAuthMethodPickerOptions(visibleGroups);
1331
+ const authMethodAdditionalNodes = useFunctionalNodes(ui.nodes);
1332
+ if (clientFetch.UiNodeGroupEnum.Code in authMethodBlocks) {
1333
+ let identifier = (_b = (_a = findNode(ui.nodes, {
1334
+ group: "identifier_first",
1335
+ node_type: "input",
1336
+ name: "identifier"
1337
+ })) == null ? void 0 : _a.attributes) == null ? void 0 : _b.value;
1338
+ identifier || (identifier = (_d = (_c = findNode(ui.nodes, {
1339
+ group: "code",
1340
+ node_type: "input",
1341
+ name: "address"
1342
+ })) == null ? void 0 : _c.attributes) == null ? void 0 : _d.value);
1343
+ if (identifier) {
1344
+ authMethodBlocks[clientFetch.UiNodeGroupEnum.Code] = {
1345
+ title: {
1346
+ id: "identities.messages.1010023",
1347
+ values: { address: identifier }
1348
+ }
1349
+ };
1054
1350
  }
1351
+ }
1352
+ const noMethods = {
1353
+ id: 5000002,
1354
+ text: intl.formatMessage({
1355
+ id: `identities.messages.5000002`,
1356
+ defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
1357
+ }),
1358
+ type: "error"
1055
1359
  };
1056
- const hasOidc = ui.nodes.some((node) => node.group === clientFetch.UiNodeGroupEnum.Oidc);
1057
- const showOidc = !(formState.current === "method_active" && formState.method !== "oidc");
1058
1360
  return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1059
1361
  /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1060
1362
  /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1061
1363
  /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1062
- showOidc && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1063
- /* @__PURE__ */ jsxRuntime.jsxs(OryForm, { onAfterSubmit: handleAfterFormSubmit, children: [
1064
- /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1065
- formState.current === "provide_identifier" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1066
- hasOidc && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1067
- nonOidcNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1068
- ] }),
1069
- formState.current === "select_method" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1364
+ /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1365
+ Object.entries(authMethodBlocks).length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
1366
+ OryForm,
1367
+ {
1368
+ "data-testid": `ory/form/methods/local`,
1369
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1370
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1070
1371
  /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1071
1372
  /* @__PURE__ */ jsxRuntime.jsx(
1072
1373
  AuthMethodList,
1073
1374
  {
1074
- options,
1375
+ options: authMethodBlocks,
1075
1376
  setSelectedGroup: (group) => dispatchFormState({
1076
1377
  type: "action_select_method",
1077
1378
  method: group
1078
1379
  })
1079
1380
  }
1080
- )
1081
- ] }),
1082
- formState.current === "method_active" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1083
- ui.nodes.filter((n) => n.type === "script").map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1084
- finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1381
+ ),
1382
+ authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1085
1383
  ] })
1086
- ] }),
1087
- /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1088
- ] })
1089
- ] })
1384
+ }
1385
+ ) : !hasSingleSignOnNodes(ui.nodes) && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": `ory/form/methods/local`, children: /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: noMethods }, noMethods.id) }) })
1386
+ ] }),
1387
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1090
1388
  ] });
1091
1389
  }
1092
- function AuthMethodList({ options, setSelectedGroup }) {
1093
- const { Card } = useComponents();
1094
- const { setValue } = reactHookForm.useFormContext();
1095
- const handleClick = (group) => {
1096
- if (isGroupImmediateSubmit(group)) {
1097
- setValue("method", group);
1098
- } else {
1099
- setSelectedGroup(group);
1100
- }
1101
- };
1102
- return options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
1103
- Card.AuthMethodListItem,
1104
- {
1105
- group: option,
1106
- onClick: () => handleClick(option)
1107
- },
1108
- option
1109
- ));
1390
+ function OryTwoStepCard() {
1391
+ const { formState } = useOryFlow();
1392
+ switch (formState.current) {
1393
+ case "provide_identifier":
1394
+ return /* @__PURE__ */ jsxRuntime.jsx(OryTwoStepCardStateProvideIdentifier, {});
1395
+ case "select_method":
1396
+ return /* @__PURE__ */ jsxRuntime.jsx(OryTwoStepCardStateSelectMethod, {});
1397
+ case "method_active":
1398
+ return /* @__PURE__ */ jsxRuntime.jsx(OryTwoStepCardStateMethodActive, { formState });
1399
+ }
1400
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1401
+ "unknown form state: ",
1402
+ formState.current
1403
+ ] });
1110
1404
  }
1111
1405
  function OryFormGroups({ groups }) {
1112
1406
  const {
@@ -1116,8 +1410,8 @@ function OryFormGroups({ groups }) {
1116
1410
  const { flowType } = useOryFlow();
1117
1411
  const { Form } = useComponents();
1118
1412
  const nodes = ui.nodes.filter((node) => groups.indexOf(node.group) > -1).sort((a, b) => nodeSorter(a, b, { flowType }));
1119
- return /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: nodes.map((node, k) => {
1120
- return /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k);
1413
+ return /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: nodes.map((node) => {
1414
+ return /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node));
1121
1415
  }) });
1122
1416
  }
1123
1417
  function OryFormSection({
@@ -1146,14 +1440,29 @@ function OryFormSectionInner({
1146
1440
  }
1147
1441
  );
1148
1442
  }
1443
+ function OryConsentCard() {
1444
+ const { Form, Card } = useComponents();
1445
+ const flow = useOryFlow();
1446
+ return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1447
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1448
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(OryForm, { children: [
1449
+ /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1450
+ /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: flow.flow.ui.nodes.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node))) }),
1451
+ /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1452
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1453
+ ] }) })
1454
+ ] });
1455
+ }
1149
1456
  function OryFormGroupDivider() {
1150
1457
  const { Card } = useComponents();
1151
1458
  const {
1152
1459
  flow: { ui }
1153
1460
  } = useOryFlow();
1154
- const filteredNodes = ui.nodes.filter((node) => node.group === "oidc");
1461
+ const filteredNodes = ui.nodes.filter(
1462
+ (node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
1463
+ );
1155
1464
  const otherNodes = ui.nodes.filter(
1156
- (node) => node.group !== "oidc" && node.group !== "default"
1465
+ (node) => !(node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml) && node.group !== "default"
1157
1466
  );
1158
1467
  if (filteredNodes.length > 0 && otherNodes.length > 0) {
1159
1468
  return /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {});
@@ -1179,7 +1488,7 @@ function OrySettingsOidc({ nodes }) {
1179
1488
  onClick: () => {
1180
1489
  if (node.attributes.node_type === "input") {
1181
1490
  setValue("link", node.attributes.value);
1182
- setValue("method", "oidc");
1491
+ setValue("method", node.group);
1183
1492
  }
1184
1493
  }
1185
1494
  }));
@@ -1188,7 +1497,7 @@ function OrySettingsOidc({ nodes }) {
1188
1497
  onClick: () => {
1189
1498
  if (node.attributes.node_type === "input") {
1190
1499
  setValue("unlink", node.attributes.value);
1191
- setValue("method", "oidc");
1500
+ setValue("method", node.group);
1192
1501
  }
1193
1502
  }
1194
1503
  }));
@@ -1497,16 +1806,19 @@ function SettingsSectionContent({ group, nodes }) {
1497
1806
  const { Card } = useComponents();
1498
1807
  const intl = reactIntl.useIntl();
1499
1808
  const { flow } = useOryFlow();
1500
- const uniqueGroups = useNodesGroups(flow.ui.nodes);
1809
+ const groupedNodes = useNodesGroups(flow.ui.nodes, {
1810
+ // Script nodes are already handled by the parent component.
1811
+ omit: ["script"]
1812
+ });
1501
1813
  if (group === clientFetch.UiNodeGroupEnum.Totp) {
1502
1814
  return /* @__PURE__ */ jsxRuntime.jsxs(
1503
1815
  OryFormSection,
1504
1816
  {
1505
- nodes: uniqueGroups.groups.totp,
1817
+ nodes: groupedNodes.groups.totp,
1506
1818
  "data-testid": "ory/screen/settings/group/totp",
1507
1819
  children: [
1508
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsTotp, { nodes: (_a = uniqueGroups.groups.totp) != null ? _a : [] }),
1509
- (_b = uniqueGroups.groups.default) == null ? void 0 : _b.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1820
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsTotp, { nodes: (_a = groupedNodes.groups.totp) != null ? _a : [] }),
1821
+ (_b = groupedNodes.groups.default) == null ? void 0 : _b.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1510
1822
  ]
1511
1823
  }
1512
1824
  );
@@ -1515,16 +1827,16 @@ function SettingsSectionContent({ group, nodes }) {
1515
1827
  return /* @__PURE__ */ jsxRuntime.jsxs(
1516
1828
  OryFormSection,
1517
1829
  {
1518
- nodes: uniqueGroups.groups.lookup_secret,
1830
+ nodes: groupedNodes.groups.lookup_secret,
1519
1831
  "data-testid": "ory/screen/settings/group/lookup_secret",
1520
1832
  children: [
1521
1833
  /* @__PURE__ */ jsxRuntime.jsx(
1522
1834
  OrySettingsRecoveryCodes,
1523
1835
  {
1524
- nodes: (_c = uniqueGroups.groups.lookup_secret) != null ? _c : []
1836
+ nodes: (_c = groupedNodes.groups.lookup_secret) != null ? _c : []
1525
1837
  }
1526
1838
  ),
1527
- (_d = uniqueGroups.groups.default) == null ? void 0 : _d.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1839
+ (_d = groupedNodes.groups.default) == null ? void 0 : _d.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1528
1840
  ]
1529
1841
  }
1530
1842
  );
@@ -1533,11 +1845,11 @@ function SettingsSectionContent({ group, nodes }) {
1533
1845
  return /* @__PURE__ */ jsxRuntime.jsxs(
1534
1846
  OryFormSection,
1535
1847
  {
1536
- nodes: uniqueGroups.groups.oidc,
1848
+ nodes: groupedNodes.groups.oidc,
1537
1849
  "data-testid": "ory/screen/settings/group/oidc",
1538
1850
  children: [
1539
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsOidc, { nodes: (_e = uniqueGroups.groups.oidc) != null ? _e : [] }),
1540
- (_f = uniqueGroups.groups.default) == null ? void 0 : _f.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1851
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsOidc, { nodes: (_e = groupedNodes.groups.oidc) != null ? _e : [] }),
1852
+ (_f = groupedNodes.groups.default) == null ? void 0 : _f.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1541
1853
  ]
1542
1854
  }
1543
1855
  );
@@ -1546,11 +1858,11 @@ function SettingsSectionContent({ group, nodes }) {
1546
1858
  return /* @__PURE__ */ jsxRuntime.jsxs(
1547
1859
  OryFormSection,
1548
1860
  {
1549
- nodes: uniqueGroups.groups.webauthn,
1861
+ nodes: groupedNodes.groups.webauthn,
1550
1862
  "data-testid": "ory/screen/settings/group/webauthn",
1551
1863
  children: [
1552
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsWebauthn, { nodes: (_g = uniqueGroups.groups.webauthn) != null ? _g : [] }),
1553
- (_h = uniqueGroups.groups.default) == null ? void 0 : _h.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1864
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsWebauthn, { nodes: (_g = groupedNodes.groups.webauthn) != null ? _g : [] }),
1865
+ (_h = groupedNodes.groups.default) == null ? void 0 : _h.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1554
1866
  ]
1555
1867
  }
1556
1868
  );
@@ -1559,11 +1871,11 @@ function SettingsSectionContent({ group, nodes }) {
1559
1871
  return /* @__PURE__ */ jsxRuntime.jsxs(
1560
1872
  OryFormSection,
1561
1873
  {
1562
- nodes: uniqueGroups.groups.passkey,
1874
+ nodes: groupedNodes.groups.passkey,
1563
1875
  "data-testid": "ory/screen/settings/group/passkey",
1564
1876
  children: [
1565
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsPasskey, { nodes: (_i = uniqueGroups.groups.passkey) != null ? _i : [] }),
1566
- (_j = uniqueGroups.groups.default) == null ? void 0 : _j.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1877
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsPasskey, { nodes: (_i = groupedNodes.groups.passkey) != null ? _i : [] }),
1878
+ (_j = groupedNodes.groups.default) == null ? void 0 : _j.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1567
1879
  ]
1568
1880
  }
1569
1881
  );
@@ -1584,30 +1896,30 @@ function SettingsSectionContent({ group, nodes }) {
1584
1896
  id: `settings.${group}.description`
1585
1897
  }),
1586
1898
  children: [
1587
- (_k = uniqueGroups.groups.default) == null ? void 0 : _k.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1899
+ (_k = groupedNodes.groups.default) == null ? void 0 : _k.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node))),
1588
1900
  nodes.filter(
1589
1901
  (node) => "type" in node.attributes && node.attributes.type !== "submit"
1590
- ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1902
+ ).map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1591
1903
  ]
1592
1904
  }
1593
1905
  ),
1594
1906
  /* @__PURE__ */ jsxRuntime.jsx(Card.SettingsSectionFooter, { children: nodes.filter(
1595
1907
  (node) => "type" in node.attributes && node.attributes.type === "submit"
1596
- ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)) })
1908
+ ).map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node))) })
1597
1909
  ]
1598
1910
  }
1599
1911
  );
1600
1912
  }
1601
- var getScriptNode = (nodes) => nodes.find(
1602
- (node) => "id" in node.attributes && node.attributes.id === "webauthn_script"
1913
+ var onlyScriptNodes = (nodes) => nodes.filter(
1914
+ (node) => clientFetch.isUiNodeScriptAttributes(node.attributes) && node.attributes.id === "webauthn_script"
1603
1915
  );
1604
1916
  function OrySettingsCard() {
1605
1917
  const { flow } = useOryFlow();
1606
- const uniqueGroups = useNodesGroups(flow.ui.nodes);
1607
- const scriptNode = getScriptNode(flow.ui.nodes);
1918
+ const uniqueGroups = useNodesGroups(flow.ui.nodes, { omit: ["script"] });
1919
+ const scriptNodes = onlyScriptNodes(flow.ui.nodes);
1608
1920
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1609
1921
  /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1610
- scriptNode && /* @__PURE__ */ jsxRuntime.jsx(Node, { node: scriptNode }),
1922
+ scriptNodes.map((n) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node: n }, clientFetch.getNodeId(n))),
1611
1923
  uniqueGroups.entries.map(([group, nodes]) => {
1612
1924
  if (group === clientFetch.UiNodeGroupEnum.Default) {
1613
1925
  return null;
@@ -1703,9 +2015,9 @@ var en_default = {
1703
2015
  "identities.messages.1010005": "Verify",
1704
2016
  "identities.messages.1010006": "Authentication code",
1705
2017
  "identities.messages.1010007": "Backup recovery code",
1706
- "identities.messages.1010008": "Sign in with hardware key",
1707
- "identities.messages.1010009": "Use Authenticator",
1708
- "identities.messages.1010010": "Use backup recovery code",
2018
+ "identities.messages.1010008": "Continue with hardware key",
2019
+ "identities.messages.1010009": "Continue",
2020
+ "identities.messages.1010010": "Continue",
1709
2021
  "identities.messages.1010011": "Sign in with hardware key",
1710
2022
  "identities.messages.1010012": "Prepare your WebAuthn device (e.g. security key, biometrics scanner, ...) and press continue.",
1711
2023
  "identities.messages.1010013": "Continue",
@@ -1842,9 +2154,17 @@ var en_default = {
1842
2154
  "login.subtitle-oauth2": "To authenticate {clientName}",
1843
2155
  "login.title": "Sign in",
1844
2156
  "login.subtitle": "Sign in with {parts}",
1845
- "login.title-aal2": "Two-Factor Authentication",
2157
+ "login.title-aal2": "Second factor authentication",
2158
+ "login.subtitle-aal2": "Choose a way to complete your second factor authentication",
2159
+ "login.code.subtitle": "A verification code will be sent by email",
2160
+ "login.webauthn.subtitle": "Please prepare your WebAuthN device",
2161
+ "login.totp.subtitle": "Please enter the code generated by your Authenticator App",
2162
+ "login.lookup_secret.subtitle": "Please enter one of your 8-digit backup recovery codes",
1846
2163
  "login.title-refresh": "Reauthenticate",
1847
2164
  "login.subtitle-refresh": "Confirm your identity with {parts}",
2165
+ "login.2fa.go-back": "Something isn't working?",
2166
+ "login.2fa.go-back.link": "Go back",
2167
+ "login.2fa.method.go-back": "Choose another method",
1848
2168
  "logout.accept-button": "Yes",
1849
2169
  "logout.reject-button": "No",
1850
2170
  "logout.title": "Do you wish to log out?",
@@ -1893,10 +2213,14 @@ var en_default = {
1893
2213
  "two-step.password.description": "Enter your password associated with your account",
1894
2214
  "two-step.code.title": "Email code",
1895
2215
  "two-step.code.description": "A verification code will be sent to your email",
1896
- "two-step.webauthn.title": "Security Key",
2216
+ "two-step.webauthn.title": "Security key",
1897
2217
  "two-step.webauthn.description": "Use your security key to authenticate",
1898
2218
  "two-step.passkey.title": "Passkey (recommended)",
1899
2219
  "two-step.passkey.description": "Use your device's for fingerprint or face recognition",
2220
+ "two-step.totp.title": "Use your Authenticator App (TOTP)",
2221
+ "two-step.totp.description": "Use a 6-digit one-time code from your authenticator app",
2222
+ "two-step.lookup_secret.title": "Backup recovery code",
2223
+ "two-step.lookup_secret.description": "Use up one of your 8-digit backup codes to authenticate",
1900
2224
  "identities.messages.1010020": "",
1901
2225
  "input.placeholder": "Enter your {placeholder}",
1902
2226
  "card.header.parts.oidc": "a social provider",
@@ -1930,7 +2254,27 @@ var en_default = {
1930
2254
  "property.phone": "phone",
1931
2255
  "property.username": "username",
1932
2256
  "property.identifier": "identifier",
1933
- "property.code": "code"
2257
+ "property.code": "code",
2258
+ "consent.title": "Authorize {party}",
2259
+ "consent.subtitle": "A third party application wants to access information associated with your account {identifier}.",
2260
+ "consent.scope.openid.title": "Identity",
2261
+ "consent.scope.openid.description": "Allows the application to verify your identity. This is required for authentication and a trusted login experience.",
2262
+ "consent.scope.offline_access.title": "Offline Access",
2263
+ "consent.scope.offline_access.description": "Allows this application to keep you signed in even when you're not actively using it.",
2264
+ "consent.scope.profile.title": "Profile Information",
2265
+ "consent.scope.profile.description": "Allows access to your basic profile details, including your username, first name, and last name.",
2266
+ "consent.scope.email.title": "Email Address",
2267
+ "consent.scope.email.description": "Retrieve your email address and its verification status.",
2268
+ "consent.scope.address.title": "Physical Address",
2269
+ "consent.scope.address.description": "Access your postal address.",
2270
+ "consent.scope.phone.title": "Phone Number",
2271
+ "consent.scope.phone.description": "Retrieve your phone number and its verification status.",
2272
+ "error.title.what-happened": "What happened?",
2273
+ "error.title.what-can-i-do": "What can I do?",
2274
+ "error.instructions": "Please try again in a few minutes or contact the website operator.",
2275
+ "error.footer.text": "When reporting this error, please include the following information:",
2276
+ "error.footer.copy": "Copy",
2277
+ "error.action.go-back": "Go back"
1934
2278
  };
1935
2279
 
1936
2280
  // src/locales/de.json
@@ -1956,9 +2300,9 @@ var de_default = {
1956
2300
  "identities.messages.1010005": "Verifizieren",
1957
2301
  "identities.messages.1010006": "Authentifizierungscode",
1958
2302
  "identities.messages.1010007": "Backup-Wiederherstellungscode",
1959
- "identities.messages.1010008": "Sicherheitsschl\xFCssel verwenden",
1960
- "identities.messages.1010009": "Authentifizierungs-App verwenden",
1961
- "identities.messages.1010010": "Backup-Wiederherstellungscode verwenden",
2303
+ "identities.messages.1010008": "Mit Sicherheitsschl\xFCssel fortfahren",
2304
+ "identities.messages.1010009": "Weiter",
2305
+ "identities.messages.1010010": "Weiter",
1962
2306
  "identities.messages.1010011": "Mit Sicherheitsschl\xFCssel fortfahren",
1963
2307
  "identities.messages.1010012": "Bereiten Sie Ihr WebAuthn-Ger\xE4t vor (z. B. Sicherheitsschl\xFCssel, biometrischer Scanner, ...) und dr\xFCcken Sie auf Weiter.",
1964
2308
  "identities.messages.1010013": "Weiter",
@@ -2074,8 +2418,16 @@ var de_default = {
2074
2418
  "login.registration-label": "Sie haben noch kein Konto?",
2075
2419
  "login.subtitle-oauth2": "Zur Authentifizierung bei {clientName}",
2076
2420
  "login.title": "Anmelden",
2077
- "login.title-aal2": "Zwei-Faktor-Authentifizierung",
2421
+ "login.title-aal2": "Zweitfaktor-Authentifizierung",
2422
+ "login.subtitle-aal2": "W\xE4hlen Sie eine Methode zur Best\xE4tigung Ihrer Zwei-Faktor-Authentifizierung",
2423
+ "login.code.subtitle": "Ein Best\xE4tigungscode wird per E-Mail gesendet",
2424
+ "login.webauthn.subtitle": "Bitte bereiten Sie Ihr WebAuthN-Ger\xE4t vor",
2425
+ "login.totp.subtitle": "Bitte geben Sie den Code aus Ihrer Authenticator-App ein",
2426
+ "login.lookup_secret.subtitle": "Bitte geben Sie einen Ihrer 8-stelligen Backup-Wiederherstellungscodes ein",
2078
2427
  "login.title-refresh": "Best\xE4tigen Sie, dass Sie es sind",
2428
+ "login.2fa.go-back": "Funktioniert etwas nicht?",
2429
+ "login.2fa.go-back.link": "Zur\xFCck",
2430
+ "login.2fa.method.go-back": "Eine andere Methode w\xE4hlen",
2079
2431
  "logout.accept-button": "Ja",
2080
2432
  "logout.reject-button": "Nein",
2081
2433
  "logout.title": "M\xF6chten Sie sich abmelden?",
@@ -2093,11 +2445,15 @@ var de_default = {
2093
2445
  "two-step.code.description": "Ein Best\xE4tigungscode wird an Ihre E-Mail gesendet.",
2094
2446
  "two-step.code.title": "E-Mail-Code",
2095
2447
  "two-step.passkey.description": "Verwenden Sie die Fingerabdruck- oder Gesichtserkennung Ihres Ger\xE4ts",
2096
- "two-step.passkey.title": "Passwort (empfohlen)",
2448
+ "two-step.passkey.title": "Passkey (empfohlen)",
2097
2449
  "two-step.password.description": "Geben Sie Ihr Passwort ein, das mit Ihrem Konto verkn\xFCpft ist",
2098
2450
  "two-step.password.title": "Passwort",
2099
- "two-step.webauthn.description": "Verwenden Sie Ihren Sicherheitsschl\xFCssel zur Authentifizierung",
2100
2451
  "two-step.webauthn.title": "Sicherheitsschl\xFCssel",
2452
+ "two-step.webauthn.description": "Verwenden Sie Ihren Sicherheitsschl\xFCssel zur Authentifizierung",
2453
+ "two-step.totp.title": "Verwenden Sie Ihre Authenticator-App (TOTP)",
2454
+ "two-step.totp.description": "Verwenden Sie einen 6-stelligen Einmal-Code aus Ihrer Authenticator-App",
2455
+ "two-step.lookup_secret.title": "Backup-Wiederherstellungscode",
2456
+ "two-step.lookup_secret.description": "Verwenden Sie einen Ihrer 8-stelligen Backup-Codes, um sich zu authentifizieren",
2101
2457
  "identities.messages.1070014": "Login- und Link-Zugangsdaten",
2102
2458
  "identities.messages.1070015": "Bitte schlie\xDFen Sie die Captcha-Challenge ab, um fortzufahren.",
2103
2459
  "identities.messages.4000038": "Die Captcha-\xDCberpr\xFCfung ist fehlgeschlagen. Bitte versuchen Sie es erneut.",
@@ -2105,20 +2461,20 @@ var de_default = {
2105
2461
  "login.cancel-label": "Nicht das richtige Konto?",
2106
2462
  "identities.messages.1010023": "Code an {address} senden",
2107
2463
  "identities.messages.1010016": "Sie haben versucht, sich mit \u201E{duplicateIdentifier}\u201C anzumelden, aber diese E-Mail-Adresse wird bereits von einem anderen Konto verwendet. \nMelden Sie sich mit einer der folgenden Optionen bei Ihrem Konto an, um Ihr Konto \u201E{duplicateIdentifier}\u201C bei \u201E{provider}\u201C als weitere Anmeldem\xF6glichkeit hinzuzuf\xFCgen.",
2108
- "identities.messages.1010017": "",
2109
- "identities.messages.1010018": "",
2110
- "identities.messages.1010019": "",
2464
+ "identities.messages.1010017": "Anmelden und verbinden",
2465
+ "identities.messages.1010018": "Mit {provider} best\xE4tigen",
2466
+ "identities.messages.1010019": "Code senden um fortzufahren",
2111
2467
  "identities.messages.1010020": "",
2112
- "identities.messages.1010021": "",
2113
- "identities.messages.1010022": "",
2114
- "identities.messages.1040007": "",
2115
- "identities.messages.1040008": "",
2116
- "identities.messages.1040009": "",
2468
+ "identities.messages.1010021": "Mit Paskey anmelden",
2469
+ "identities.messages.1010022": "Mit Passwort anmelden",
2470
+ "identities.messages.1040007": "Mit Passkey registrieren",
2471
+ "identities.messages.1040008": "Zur\xFCck",
2472
+ "identities.messages.1040009": "Bitte w\xE4hlen Sie eine Authentifizierungsmethode, um fortzufahren.",
2117
2473
  "identities.messages.1050019": "Passkey hinzuf\xFCgen",
2118
- "identities.messages.1050020": "",
2119
- "identities.messages.4000037": "",
2120
- "identities.messages.4010009": "",
2121
- "identities.messages.4010010": "",
2474
+ "identities.messages.1050020": 'Passkey "{display_name}" entfernen',
2475
+ "identities.messages.4000037": "F\xFCr die eingegebenen Daten existiert kein Account",
2476
+ "identities.messages.4010009": "Die Authentifizierungsmethode stimmt nicht mit der vorherigen Authentifizierungsmethode \xFCberein. Bitte versuchen Sie es erneut.",
2477
+ "identities.messages.4010010": "Die eingegebene Adresse stimmt nicht mit der Adresse \xFCberein, die Sie bei der Registrierung angegeben haben. Bitte versuchen Sie es erneut.",
2122
2478
  "input.placeholder": "{placeholder} eingeben",
2123
2479
  "card.header.parts.code": "einem Code per E-Mail",
2124
2480
  "card.header.parts.identifier-first": "Ihr {identifierLabel}",
@@ -2183,7 +2539,27 @@ var de_default = {
2183
2539
  "property.password": "Passwort",
2184
2540
  "property.phone": "Telefon",
2185
2541
  "property.code": "Code",
2186
- "property.username": "Benutzername"
2542
+ "property.username": "Benutzername",
2543
+ "consent.title": "Autorisieren {party}",
2544
+ "consent.subtitle": "Eine Drittanbieteranwendung m\xF6chte auf Informationen zugreifen, die mit Ihrem Konto {identifier} verkn\xFCpft sind.",
2545
+ "consent.scope.openid.title": "Identit\xE4t",
2546
+ "consent.scope.openid.description": "Erm\xF6glicht der Anwendung, Ihre Identit\xE4t zu \xFCberpr\xFCfen. Dies ist f\xFCr die Authentifizierung und eine vertrauensw\xFCrdige Login-Erfahrung erforderlich.",
2547
+ "consent.scope.offline_access.title": "Offline-Zugriff",
2548
+ "consent.scope.offline_access.description": "Erm\xF6glicht dieser Anwendung, Sie angemeldet zu lassen, auch wenn Sie sie nicht aktiv nutzen.",
2549
+ "consent.scope.profile.title": "Profilinformationen",
2550
+ "consent.scope.profile.description": "Erm\xF6glicht den Zugriff auf Ihre grundlegenden Profildetails, einschlie\xDFlich Ihres Benutzernamens, Vornamens und Nachnamens.",
2551
+ "consent.scope.email.title": "E-Mail-Adresse",
2552
+ "consent.scope.email.description": "Erm\xF6glicht den Abruf Ihrer E-Mail-Adresse und deren \xDCberpr\xFCfungsstatus.",
2553
+ "consent.scope.address.title": "Physische Adresse",
2554
+ "consent.scope.address.description": "Erm\xF6glicht den Zugriff auf Ihre Postanschrift.",
2555
+ "consent.scope.phone.title": "Telefonnummer",
2556
+ "consent.scope.phone.description": "Erm\xF6glicht den Abruf Ihrer Telefonnummer und deren \xDCberpr\xFCfungsstatus.",
2557
+ "error.title.what-happened": "Was ist passiert?",
2558
+ "error.footer.copy": "Kopieren",
2559
+ "error.footer.text": "Bitte f\xFCgen Sie bei der Meldung dieses Fehlers die folgenden Informationen hinzu:",
2560
+ "error.instructions": "Bitte versuchen Sie es in wenigen Minuten erneut oder wenden Sie sich an den Website-Betreiber.",
2561
+ "error.title.what-can-i-do": "Was kann ich tun?",
2562
+ "error.action.go-back": "Zur\xFCck"
2187
2563
  };
2188
2564
 
2189
2565
  // src/locales/es.json
@@ -2199,7 +2575,6 @@ var es_default = {
2199
2575
  "error.back-button": "Regresar",
2200
2576
  "error.description": "Ocurri\xF3 un error con el siguiente mensaje:",
2201
2577
  "error.support-email-link": "Si el problema persiste, por favor contacte a <a>{contactSupportEmail}</a>",
2202
- "error.title": "Ocurri\xF3 un error",
2203
2578
  "error.title-internal-server-error": "Error Interno del Servidor",
2204
2579
  "error.title-not-found": "404 - P\xE1gina no encontrada",
2205
2580
  "identities.messages.1010001": "Iniciar sesi\xF3n",
@@ -2209,9 +2584,9 @@ var es_default = {
2209
2584
  "identities.messages.1010005": "Verificar",
2210
2585
  "identities.messages.1010006": "C\xF3digo de autenticaci\xF3n",
2211
2586
  "identities.messages.1010007": "C\xF3digo de recuperaci\xF3n de respaldo",
2212
- "identities.messages.1010008": "Usar llave de seguridad",
2213
- "identities.messages.1010009": "Usar Autenticador",
2214
- "identities.messages.1010010": "Usar c\xF3digo de recuperaci\xF3n de respaldo",
2587
+ "identities.messages.1010008": "Continuar con la llave de hardware",
2588
+ "identities.messages.1010009": "Continuar",
2589
+ "identities.messages.1010010": "Continuar",
2215
2590
  "identities.messages.1010011": "Continuar con llave de seguridad",
2216
2591
  "identities.messages.1010012": "Prepare su dispositivo WebAuthn (por ejemplo, llave de seguridad, esc\xE1ner biom\xE9trico, ...) y presione continuar.",
2217
2592
  "identities.messages.1010013": "Continuar",
@@ -2327,8 +2702,16 @@ var es_default = {
2327
2702
  "login.registration-label": "\xBFNo tiene una cuenta?",
2328
2703
  "login.subtitle-oauth2": "Para autenticar a {clientName}",
2329
2704
  "login.title": "Iniciar sesi\xF3n",
2330
- "login.title-aal2": "Autenticaci\xF3n de Dos Factores",
2705
+ "login.title-aal2": "Autenticaci\xF3n de dos factores",
2706
+ "login.subtitle-aal2": "Elija una forma de completar su autenticaci\xF3n de segundo factor",
2707
+ "login.code.subtitle": "Se enviar\xE1 un c\xF3digo de verificaci\xF3n por correo electr\xF3nico",
2708
+ "login.webauthn.subtitle": "Por favor, prepare su dispositivo WebAuthN",
2709
+ "login.totp.subtitle": "Ingrese el c\xF3digo generado por su aplicaci\xF3n de autenticaci\xF3n",
2710
+ "login.lookup_secret.subtitle": "Ingrese uno de sus c\xF3digos de recuperaci\xF3n de respaldo de 8 d\xEDgitos",
2331
2711
  "login.title-refresh": "Confirme que es usted",
2712
+ "login.2fa.go-back": "\xBFAlgo no funciona?",
2713
+ "login.2fa.go-back.link": "Volver",
2714
+ "login.2fa.method.go-back": "Elegir otro m\xE9todo",
2332
2715
  "logout.accept-button": "S\xED",
2333
2716
  "logout.reject-button": "No",
2334
2717
  "logout.title": "\xBFDesea cerrar sesi\xF3n?",
@@ -2360,47 +2743,12 @@ var es_default = {
2360
2743
  "two-step.passkey.title": "Clave de acceso (recomendada)",
2361
2744
  "two-step.password.description": "Ingrese la contrase\xF1a asociada con su cuenta",
2362
2745
  "two-step.password.title": "Contrase\xF1a",
2363
- "two-step.webauthn.description": "Utiliza tu llave de seguridad para autenticarte",
2364
2746
  "two-step.webauthn.title": "Clave de Seguridad",
2365
- "identities.messages.1010016": "",
2366
- "identities.messages.1010017": "",
2367
- "identities.messages.1010018": "",
2368
- "identities.messages.1010019": "",
2369
- "identities.messages.1010020": "",
2370
- "identities.messages.1010021": "",
2371
- "identities.messages.1010022": "",
2372
- "identities.messages.1010023": "",
2373
- "identities.messages.1040007": "",
2374
- "identities.messages.1040008": "",
2375
- "identities.messages.1040009": "",
2376
- "identities.messages.1050019": "",
2377
- "identities.messages.1050020": "",
2378
- "identities.messages.1070014": "",
2379
- "identities.messages.1070015": "",
2380
- "identities.messages.4000037": "",
2381
- "identities.messages.4000038": "",
2382
- "identities.messages.4010009": "",
2383
- "identities.messages.4010010": "",
2384
- "login.cancel-button": "",
2385
- "login.cancel-label": "",
2386
- "input.placeholder": "",
2387
- "card.header.description.login": "",
2388
- "card.header.description.registration": "",
2389
- "card.header.parts.code": "",
2390
- "card.header.parts.identifier-first": "",
2391
- "card.header.parts.oidc": "",
2392
- "card.header.parts.passkey": "",
2393
- "card.header.parts.password.login": "",
2394
- "card.header.parts.password.registration": "",
2395
- "card.header.parts.webauthn": "",
2396
- "forms.label.forgot-password": "",
2397
- "login.subtitle": "",
2398
- "login.subtitle-refresh": "",
2399
- "misc.or": "",
2400
- "recovery.subtitle": "",
2401
- "registration.subtitle": "",
2402
- "settings.subtitle": "",
2403
- "verification.subtitle": "",
2747
+ "two-step.webauthn.description": "Utilice su llave de seguridad para autenticase",
2748
+ "two-step.totp.title": "Utilice su aplicaci\xF3n de autenticaci\xF3n (TOTP)",
2749
+ "two-step.totp.description": "Utilice un c\xF3digo de un solo uso de 6 d\xEDgitos de su aplicaci\xF3n de autenticaci\xF3n",
2750
+ "two-step.lookup_secret.title": "C\xF3digo de recuperaci\xF3n de respaldo",
2751
+ "two-step.lookup_secret.description": "Utilice uno de sus c\xF3digos de respaldo de 8 d\xEDgitos para autenticarse",
2404
2752
  "settings.totp.info.linked": "Actualmente tienes una aplicaci\xF3n de autenticaci\xF3n conectada.",
2405
2753
  "settings.totp.info.not-linked": "Para habilitar, escanea el c\xF3digo QR con tu autenticador e ingresa el c\xF3digo.",
2406
2754
  "settings.totp.title": "Aplicaci\xF3n Autenticadora",
@@ -2418,25 +2766,85 @@ var es_default = {
2418
2766
  "settings.profile.title": "Configuraci\xF3n de Perfil",
2419
2767
  "settings.webauthn.description": "Administra la configuraci\xF3n de tu token de hardware",
2420
2768
  "settings.webauthn.title": "Gestionar Tokens de Hardware",
2421
- "settings.oidc.info": "",
2422
- "settings.passkey.info": "",
2423
- "settings.title-lookup-secret": "",
2424
- "settings.title-navigation": "",
2425
- "settings.title-oidc": "",
2426
- "settings.title-passkey": "",
2427
- "settings.title-password": "",
2428
- "settings.title-profile": "",
2429
- "settings.title-totp": "",
2430
- "settings.title-webauthn": "",
2431
- "settings.webauthn.info": "",
2432
- "card.footer.select-another-method": "",
2433
- "account-linking.title": "",
2434
- "property.code": "",
2435
- "property.email": "",
2436
- "property.identifier": "",
2437
- "property.password": "",
2438
- "property.phone": "",
2439
- "property.username": ""
2769
+ "consent.title": "Autorizar {party}",
2770
+ "consent.subtitle": "Una aplicaci\xF3n de terceros quiere acceder a la informaci\xF3n asociada a su cuenta {identifier}.",
2771
+ "consent.scope.openid.title": "Identidad",
2772
+ "consent.scope.openid.description": "Permite que la aplicaci\xF3n verifique su identidad. Esto es necesario para la autenticaci\xF3n y una experiencia de inicio de sesi\xF3n confiable.",
2773
+ "consent.scope.offline_access.title": "Acceso sin conexi\xF3n",
2774
+ "consent.scope.offline_access.description": "Permite que esta aplicaci\xF3n le mantenga conectado incluso cuando no la est\xE9 utilizando activamente.",
2775
+ "consent.scope.profile.title": "Informaci\xF3n del perfil",
2776
+ "consent.scope.profile.description": "Permite el acceso a los detalles b\xE1sicos de su perfil, incluyendo su nombre de usuario, nombre y apellido.",
2777
+ "consent.scope.email.title": "Direcci\xF3n de correo electr\xF3nico",
2778
+ "consent.scope.email.description": "Recupere su direcci\xF3n de correo electr\xF3nico y su estado de verificaci\xF3n.",
2779
+ "consent.scope.address.title": "Direcci\xF3n f\xEDsica",
2780
+ "consent.scope.address.description": "Acceda a su direcci\xF3n postal.",
2781
+ "consent.scope.phone.title": "N\xFAmero de tel\xE9fono",
2782
+ "consent.scope.phone.description": "Recupere su n\xFAmero de tel\xE9fono y su estado de verificaci\xF3n.",
2783
+ "error.title": "Ocurri\xF3 un error",
2784
+ "identities.messages.1010016": 'Intentaste iniciar sesi\xF3n con "{duplicateIdentifier}", pero ese correo electr\xF3nico ya est\xE1 en uso por otra cuenta. Inicia sesi\xF3n en tu cuenta con una de las opciones a continuaci\xF3n para agregar tu cuenta "{duplicateIdentifier}" en "{provider}" como otra forma de iniciar sesi\xF3n.',
2785
+ "identities.messages.1010017": "Iniciar sesi\xF3n y vincular",
2786
+ "identities.messages.1010018": "Confirmar con {provider}",
2787
+ "identities.messages.1010019": "Solicitar c\xF3digo para continuar",
2788
+ "identities.messages.1010021": "Iniciar sesi\xF3n con clave de acceso",
2789
+ "identities.messages.1010022": "Iniciar sesi\xF3n con contrase\xF1a",
2790
+ "identities.messages.1010023": "Enviar c\xF3digo a {address}",
2791
+ "identities.messages.1040007": "Registrarse con clave de acceso",
2792
+ "identities.messages.1040008": "Atr\xE1s",
2793
+ "identities.messages.1040009": "Por favor, elige una credencial para autenticarte.",
2794
+ "identities.messages.1050019": "Agregar clave de acceso",
2795
+ "identities.messages.1070014": "Iniciar sesi\xF3n y vincular credencial",
2796
+ "identities.messages.1070015": "Por favor, completa el desaf\xEDo captcha para continuar.",
2797
+ "identities.messages.4000037": "Esta cuenta no existe o no tiene ning\xFAn m\xE9todo de inicio de sesi\xF3n configurado.",
2798
+ "identities.messages.4000038": "Fall\xF3 la verificaci\xF3n de Captcha, por favor intenta de nuevo.",
2799
+ "identities.messages.4010009": "Las credenciales vinculadas no coinciden.",
2800
+ "identities.messages.4010010": "La direcci\xF3n que ingresaste no coincide con ninguna direcci\xF3n conocida en la cuenta actual.",
2801
+ "login.cancel-button": "Cancelar",
2802
+ "login.cancel-label": "\xBFNo es la cuenta correcta?",
2803
+ "login.subtitle": "Iniciar sesi\xF3n con {parts}",
2804
+ "login.subtitle-refresh": "Confirma tu identidad con {parts}",
2805
+ "recovery.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para recibir un c\xF3digo de acceso \xFAnico",
2806
+ "registration.subtitle": "Registrarse con {parts}",
2807
+ "settings.subtitle": "Actualiza la configuraci\xF3n de tu cuenta",
2808
+ "settings.title-lookup-secret": "Administrar c\xF3digos de recuperaci\xF3n de respaldo 2FA",
2809
+ "settings.title-navigation": "Configuraci\xF3n de la cuenta",
2810
+ "settings.title-oidc": "Inicio de sesi\xF3n social",
2811
+ "settings.title-password": "Cambiar contrase\xF1a",
2812
+ "settings.title-profile": "Configuraci\xF3n del perfil",
2813
+ "settings.title-totp": "Administrar la aplicaci\xF3n de autenticaci\xF3n 2FA TOTP",
2814
+ "settings.title-webauthn": "Administrar tokens de hardware",
2815
+ "settings.title-passkey": "Administrar claves de acceso",
2816
+ "verification.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para verificarla",
2817
+ "input.placeholder": "Ingresa tu {placeholder}",
2818
+ "card.header.parts.oidc": "un proveedor social",
2819
+ "card.header.parts.password.registration": "tu {identifierLabel} y una contrase\xF1a",
2820
+ "card.header.parts.password.login": "tu {identifierLabel} y contrase\xF1a",
2821
+ "card.header.parts.code": "un c\xF3digo enviado a tu correo electr\xF3nico",
2822
+ "card.header.parts.passkey": "una clave de acceso",
2823
+ "card.header.parts.webauthn": "una clave de seguridad",
2824
+ "card.header.parts.identifier-first": "tu {identifierLabel}",
2825
+ "card.header.description.login": "Iniciar sesi\xF3n con {identifierLabel}",
2826
+ "card.header.description.registration": "Registrarse con {identifierLabel}",
2827
+ "misc.or": "o",
2828
+ "forms.label.forgot-password": "\xBFOlvidaste tu contrase\xF1a?",
2829
+ "settings.oidc.info": "Las cuentas conectadas de estos proveedores se pueden utilizar para iniciar sesi\xF3n en tu cuenta",
2830
+ "settings.webauthn.info": "Los tokens de hardware se utilizan para la autenticaci\xF3n de segundo factor o como primer factor con las claves de acceso",
2831
+ "settings.passkey.info": "Administra la configuraci\xF3n de tus claves de acceso",
2832
+ "card.footer.select-another-method": "Seleccionar otro m\xE9todo",
2833
+ "account-linking.title": "Vincular cuenta",
2834
+ "property.password": "contrase\xF1a",
2835
+ "property.email": "correo electr\xF3nico",
2836
+ "property.phone": "tel\xE9fono",
2837
+ "property.username": "nombre de usuario",
2838
+ "property.identifier": "identificador",
2839
+ "property.code": "c\xF3digo",
2840
+ "error.title.what-happened": "\xBFQu\xE9 pas\xF3?",
2841
+ "error.title.what-can-i-do": "\xBFQu\xE9 puedo hacer?",
2842
+ "error.instructions": "Por favor, int\xE9ntalo de nuevo en unos minutos o contacta al operador del sitio web.",
2843
+ "error.footer.text": "Al informar este error, incluye la siguiente informaci\xF3n:",
2844
+ "error.footer.copy": "Copiar",
2845
+ "error.action.go-back": "Regresar",
2846
+ "identities.messages.1010020": "",
2847
+ "identities.messages.1050020": 'Eliminar passkey "{display_name}"'
2440
2848
  };
2441
2849
 
2442
2850
  // src/locales/fr.json
@@ -2462,9 +2870,9 @@ var fr_default = {
2462
2870
  "identities.messages.1010005": "V\xE9rifier",
2463
2871
  "identities.messages.1010006": "Code d'authentification",
2464
2872
  "identities.messages.1010007": "Code de r\xE9cup\xE9ration de secours",
2465
- "identities.messages.1010008": "Utiliser une cl\xE9 de s\xE9curit\xE9",
2466
- "identities.messages.1010009": "Utiliser un authentificateur",
2467
- "identities.messages.1010010": "Utiliser un code de r\xE9cup\xE9ration de secours",
2873
+ "identities.messages.1010008": "Continuer avec la cl\xE9 mat\xE9rielle",
2874
+ "identities.messages.1010009": "Continuer",
2875
+ "identities.messages.1010010": "Continuer",
2468
2876
  "identities.messages.1010011": "Continuer avec la cl\xE9 de s\xE9curit\xE9",
2469
2877
  "identities.messages.1010012": "Pr\xE9parez votre appareil WebAuthn (par exemple, une cl\xE9 de s\xE9curit\xE9, un scanner biom\xE9trique, ...) et appuyez sur Continuer.",
2470
2878
  "identities.messages.1010013": "Continuer",
@@ -2581,7 +2989,15 @@ var fr_default = {
2581
2989
  "login.subtitle-oauth2": "Pour vous authentifier sur {clientName}",
2582
2990
  "login.title": "Se connecter",
2583
2991
  "login.title-aal2": "Authentification \xE0 deux facteurs",
2992
+ "login.subtitle-aal2": "Choisissez une m\xE9thode pour compl\xE9ter votre authentification \xE0 deux facteurs",
2993
+ "login.code.subtitle": "Un code de v\xE9rification sera envoy\xE9 par e-mail",
2994
+ "login.webauthn.subtitle": "Veuillez pr\xE9parer votre dispositif WebAuthN",
2995
+ "login.totp.subtitle": "Veuillez saisir le code g\xE9n\xE9r\xE9 par votre application d'authentification",
2996
+ "login.lookup_secret.subtitle": "Veuillez saisir l'un de vos codes de r\xE9cup\xE9ration de secours \xE0 8 chiffres",
2584
2997
  "login.title-refresh": "Confirmez que c'est bien vous",
2998
+ "login.2fa.go-back": "Quelque chose ne fonctionne pas ?",
2999
+ "login.2fa.go-back.link": "Retour",
3000
+ "login.2fa.method.go-back": "Choisir une autre m\xE9thode",
2585
3001
  "logout.accept-button": "Oui",
2586
3002
  "logout.reject-button": "Non",
2587
3003
  "logout.title": "Souhaitez-vous vous d\xE9connecter ?",
@@ -2613,83 +3029,107 @@ var fr_default = {
2613
3029
  "two-step.passkey.title": "Cl\xE9 de passe (recommand\xE9e)",
2614
3030
  "two-step.password.description": "Entrez votre mot de passe associ\xE9 \xE0 votre compte",
2615
3031
  "two-step.password.title": "Mot de passe",
2616
- "two-step.webauthn.description": "Utilisez votre cl\xE9 de s\xE9curit\xE9 pour vous authentifier",
2617
3032
  "two-step.webauthn.title": "Cl\xE9 de S\xE9curit\xE9",
2618
- "identities.messages.1010023": "",
2619
- "identities.messages.1070015": "",
2620
- "identities.messages.4000038": "",
2621
- "login.cancel-button": "",
2622
- "login.cancel-label": "",
2623
- "identities.messages.1010016": "",
2624
- "identities.messages.1010017": "",
2625
- "identities.messages.1010018": "",
2626
- "identities.messages.1010019": "",
2627
- "identities.messages.1010020": "",
2628
- "identities.messages.1010021": "",
2629
- "identities.messages.1010022": "",
2630
- "identities.messages.1040007": "",
2631
- "identities.messages.1040008": "",
2632
- "identities.messages.1040009": "",
2633
- "identities.messages.1050019": "",
2634
- "identities.messages.1050020": "",
2635
- "identities.messages.1070014": "",
2636
- "identities.messages.4000037": "",
2637
- "identities.messages.4010009": "",
2638
- "identities.messages.4010010": "",
2639
- "input.placeholder": "",
2640
- "card.header.description.login": "",
2641
- "card.header.description.registration": "",
2642
- "card.header.parts.code": "",
2643
- "card.header.parts.identifier-first": "",
2644
- "card.header.parts.oidc": "",
2645
- "card.header.parts.passkey": "",
2646
- "card.header.parts.password.login": "",
2647
- "card.header.parts.password.registration": "",
2648
- "card.header.parts.webauthn": "",
2649
- "forms.label.forgot-password": "",
2650
- "login.subtitle": "",
2651
- "login.subtitle-refresh": "",
2652
- "misc.or": "",
2653
- "recovery.subtitle": "",
2654
- "registration.subtitle": "",
2655
- "settings.subtitle": "",
2656
- "verification.subtitle": "",
3033
+ "two-step.webauthn.description": "Utilisez votre cl\xE9 de s\xE9curit\xE9 pour vous authentifier",
3034
+ "two-step.totp.title": "Utilisez votre application d'authentification (TOTP)",
3035
+ "two-step.totp.description": "Utilisez un code \xE0 usage unique \xE0 6 chiffres provenant de votre application d'authentification",
3036
+ "two-step.lookup_secret.title": "Code de r\xE9cup\xE9ration de secours",
3037
+ "two-step.lookup_secret.description": "Utilisez l'un de vos codes de secours \xE0 8 chiffres pour vous authentifier",
2657
3038
  "settings.totp.info.linked": "Vous avez actuellement une application d'authentification connect\xE9e.",
2658
3039
  "settings.totp.info.not-linked": "Pour activer, scannez le QR code avec votre authentificateur et entrez le code.",
2659
3040
  "settings.totp.title": "Application d'authentification",
2660
3041
  "settings.totp.description": "Ajoutez une application d'authentification TOTP \xE0 votre compte pour am\xE9liorer la s\xE9curit\xE9 de votre compte. Les applications d'authentification populaires sont LastPass et Google Authenticator.",
2661
- "settings.lookup_secret.description": "",
2662
- "settings.lookup_secret.title": "",
2663
- "settings.navigation.title": "",
2664
- "settings.oidc.description": "",
2665
- "settings.oidc.info": "",
2666
- "settings.oidc.title": "",
2667
- "settings.passkey.description": "",
2668
- "settings.passkey.info": "",
2669
- "settings.passkey.title": "",
2670
- "settings.password.description": "",
2671
- "settings.password.title": "",
2672
- "settings.profile.description": "",
2673
- "settings.profile.title": "",
2674
- "settings.title-lookup-secret": "",
2675
- "settings.title-navigation": "",
2676
- "settings.title-oidc": "",
2677
- "settings.title-passkey": "",
2678
- "settings.title-password": "",
2679
- "settings.title-profile": "",
2680
- "settings.title-totp": "",
2681
- "settings.title-webauthn": "",
2682
- "settings.webauthn.description": "",
2683
- "settings.webauthn.info": "",
2684
- "settings.webauthn.title": "",
2685
- "card.footer.select-another-method": "",
2686
- "account-linking.title": "",
2687
- "property.code": "",
2688
- "property.email": "",
2689
- "property.identifier": "",
2690
- "property.password": "",
2691
- "property.phone": "",
2692
- "property.username": ""
3042
+ "consent.title": "Autoriser {party}",
3043
+ "consent.subtitle": "Une application tierce souhaite acc\xE9der aux informations associ\xE9es \xE0 votre compte {identifier}.",
3044
+ "consent.scope.openid.title": "Identit\xE9",
3045
+ "consent.scope.openid.description": "Permet \xE0 l'application de v\xE9rifier votre identit\xE9. Cela est n\xE9cessaire pour l'authentification et une exp\xE9rience de connexion fiable.",
3046
+ "consent.scope.offline_access.title": "Acc\xE8s hors ligne",
3047
+ "consent.scope.offline_access.description": "Permet \xE0 cette application de vous maintenir connect\xE9 m\xEAme lorsque vous ne l'utilisez pas activement.",
3048
+ "consent.scope.profile.title": "Informations de profil",
3049
+ "consent.scope.profile.description": "Permet l'acc\xE8s aux d\xE9tails de base de votre profil, y compris votre nom d'utilisateur, pr\xE9nom et nom.",
3050
+ "consent.scope.email.title": "Adresse e-mail",
3051
+ "consent.scope.email.description": "R\xE9cup\xE8re votre adresse e-mail et son statut de v\xE9rification.",
3052
+ "consent.scope.address.title": "Adresse physique",
3053
+ "consent.scope.address.description": "Acc\xE8de \xE0 votre adresse postale.",
3054
+ "consent.scope.phone.title": "Num\xE9ro de t\xE9l\xE9phone",
3055
+ "consent.scope.phone.description": "R\xE9cup\xE8re votre num\xE9ro de t\xE9l\xE9phone et son statut de v\xE9rification.",
3056
+ "identities.messages.1010016": "Vous avez essay\xE9 de vous connecter avec \xAB {duplicateIdentifier} \xBB, mais cet e-mail est d\xE9j\xE0 utilis\xE9 par un autre compte. Connectez-vous \xE0 votre compte avec l'une des options ci-dessous pour ajouter votre compte \xAB {duplicateIdentifier} \xBB sur \xAB {provider} \xBB comme autre moyen de vous connecter.",
3057
+ "identities.messages.1010017": "Se connecter et lier",
3058
+ "identities.messages.1010018": "Confirmer avec {provider}",
3059
+ "identities.messages.1010019": "Demander un code pour continuer",
3060
+ "identities.messages.1010021": "Se connecter avec une cl\xE9 d'acc\xE8s",
3061
+ "identities.messages.1010022": "Se connecter avec un mot de passe",
3062
+ "identities.messages.1010023": "Envoyer le code \xE0 {address}",
3063
+ "identities.messages.1040007": "S'inscrire avec une cl\xE9 d'acc\xE8s",
3064
+ "identities.messages.1040008": "Retour",
3065
+ "identities.messages.1040009": "Veuillez choisir une identification pour vous authentifier.",
3066
+ "identities.messages.1050019": "Ajouter une cl\xE9 d'acc\xE8s",
3067
+ "identities.messages.1050020": "Supprimer la cl\xE9 d'acc\xE8s \xAB {display_name} \xBB",
3068
+ "identities.messages.1070014": "Se connecter et lier l'identification",
3069
+ "identities.messages.1070015": "Veuillez compl\xE9ter le d\xE9fi captcha pour continuer.",
3070
+ "identities.messages.4000037": "Ce compte n'existe pas ou n'a aucune m\xE9thode de connexion configur\xE9e.",
3071
+ "identities.messages.4000038": "La v\xE9rification Captcha a \xE9chou\xE9, veuillez r\xE9essayer.",
3072
+ "identities.messages.4010009": "Les identifications li\xE9es ne correspondent pas.",
3073
+ "identities.messages.4010010": "L'adresse que vous avez saisie ne correspond \xE0 aucune adresse connue dans le compte actuel.",
3074
+ "login.cancel-button": "Annuler",
3075
+ "login.cancel-label": "Ce n'est pas le bon compte\xA0?",
3076
+ "login.subtitle": "Se connecter avec {parts}",
3077
+ "login.subtitle-refresh": "Confirmez votre identit\xE9 avec {parts}",
3078
+ "recovery.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour recevoir un code d'acc\xE8s unique",
3079
+ "registration.subtitle": "S'inscrire avec {parts}",
3080
+ "settings.subtitle": "Mettre \xE0 jour les param\xE8tres de votre compte",
3081
+ "settings.title-lookup-secret": "G\xE9rer les codes de r\xE9cup\xE9ration de sauvegarde 2FA",
3082
+ "settings.title-navigation": "Param\xE8tres du compte",
3083
+ "settings.title-oidc": "Connexion via les r\xE9seaux sociaux",
3084
+ "settings.title-password": "Changer le mot de passe",
3085
+ "settings.title-profile": "Param\xE8tres du profil",
3086
+ "settings.title-totp": "G\xE9rer l'application d'authentification 2FA TOTP",
3087
+ "settings.title-webauthn": "G\xE9rer les jetons mat\xE9riels",
3088
+ "settings.title-passkey": "G\xE9rer les cl\xE9s d'acc\xE8s",
3089
+ "settings.navigation.title": "Param\xE8tres du compte",
3090
+ "settings.password.title": "Changer le mot de passe",
3091
+ "settings.password.description": "Modifier votre mot de passe",
3092
+ "settings.profile.title": "Param\xE8tres du profil",
3093
+ "settings.profile.description": "Mettre \xE0 jour les informations de votre profil",
3094
+ "settings.webauthn.title": "G\xE9rer les jetons mat\xE9riels",
3095
+ "settings.webauthn.description": "G\xE9rer les param\xE8tres de votre jeton mat\xE9riel",
3096
+ "verification.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour la v\xE9rifier",
3097
+ "input.placeholder": "Saisissez votre {placeholder}",
3098
+ "card.header.parts.oidc": "un fournisseur de r\xE9seaux sociaux",
3099
+ "card.header.parts.password.registration": "votre {identifierLabel} et un mot de passe",
3100
+ "card.header.parts.password.login": "votre {identifierLabel} et votre mot de passe",
3101
+ "card.header.parts.code": "un code envoy\xE9 \xE0 votre adresse e-mail",
3102
+ "card.header.parts.passkey": "une cl\xE9 d'acc\xE8s",
3103
+ "card.header.parts.webauthn": "une cl\xE9 de s\xE9curit\xE9",
3104
+ "card.header.parts.identifier-first": "votre {identifierLabel}",
3105
+ "card.header.description.login": "Se connecter avec {identifierLabel}",
3106
+ "card.header.description.registration": "S'inscrire avec {identifierLabel}",
3107
+ "misc.or": "ou",
3108
+ "forms.label.forgot-password": "Mot de passe oubli\xE9?",
3109
+ "settings.lookup_secret.title": "Codes de r\xE9cup\xE9ration de sauvegarde (second facteur)",
3110
+ "settings.lookup_secret.description": "Les codes de r\xE9cup\xE9ration sont une sauvegarde s\xE9curis\xE9e pour l'authentification \xE0 deux facteurs (2FA), vous permettant de retrouver l'acc\xE8s \xE0 votre compte si vous perdez votre appareil 2FA.",
3111
+ "settings.oidc.title": "Comptes connect\xE9s",
3112
+ "settings.oidc.description": "Connectez un fournisseur de connexion sociale \xE0 votre compte.",
3113
+ "settings.oidc.info": "Les comptes connect\xE9s de ces fournisseurs peuvent \xEAtre utilis\xE9s pour vous connecter \xE0 votre compte",
3114
+ "settings.webauthn.info": "Les jetons mat\xE9riels sont utilis\xE9s pour l'authentification \xE0 deux facteurs ou comme premier facteur avec les cl\xE9s d'acc\xE8s",
3115
+ "settings.passkey.title": "G\xE9rer les cl\xE9s d'acc\xE8s",
3116
+ "settings.passkey.description": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3117
+ "settings.passkey.info": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3118
+ "card.footer.select-another-method": "S\xE9lectionner une autre m\xE9thode",
3119
+ "account-linking.title": "Lier le compte",
3120
+ "property.password": "mot de passe",
3121
+ "property.email": "e-mail",
3122
+ "property.phone": "t\xE9l\xE9phone",
3123
+ "property.username": "nom d'utilisateur",
3124
+ "property.identifier": "identifiant",
3125
+ "property.code": "code",
3126
+ "error.title.what-happened": "Que s'est-il pass\xE9?",
3127
+ "error.title.what-can-i-do": "Que puis-je faire?",
3128
+ "error.instructions": "Veuillez r\xE9essayer dans quelques minutes ou contacter l'op\xE9rateur du site Web.",
3129
+ "error.footer.text": "Lorsque vous signalez cette erreur, veuillez inclure les informations suivantes:",
3130
+ "error.footer.copy": "Copier",
3131
+ "error.action.go-back": "Retour",
3132
+ "identities.messages.1010020": ""
2693
3133
  };
2694
3134
 
2695
3135
  // src/locales/nl.json
@@ -2715,9 +3155,9 @@ var nl_default = {
2715
3155
  "identities.messages.1010005": "Verifi\xEBren",
2716
3156
  "identities.messages.1010006": "Verificatiecode",
2717
3157
  "identities.messages.1010007": "Back-up herstelcode",
2718
- "identities.messages.1010008": "Beveiligingssleutel gebruiken",
2719
- "identities.messages.1010009": "Authenticator gebruiken",
2720
- "identities.messages.1010010": "Back-up herstelcode gebruiken",
3158
+ "identities.messages.1010008": "Ga verder met hardware-sleutel",
3159
+ "identities.messages.1010009": "Doorgaan",
3160
+ "identities.messages.1010010": "Doorgaan",
2721
3161
  "identities.messages.1010011": "Doorgaan met beveiligingssleutel",
2722
3162
  "identities.messages.1010012": "Bereid uw WebAuthn-apparaat voor (bijv. beveiligingssleutel, biometrische scanner, ...) en druk op doorgaan.",
2723
3163
  "identities.messages.1010013": "Doorgaan",
@@ -2833,8 +3273,16 @@ var nl_default = {
2833
3273
  "login.registration-label": "Heb je nog geen account?",
2834
3274
  "login.subtitle-oauth2": "Om te authenticeren bij {clientName}",
2835
3275
  "login.title": "Inloggen",
2836
- "login.title-aal2": "Twee-Factor Authenticatie",
3276
+ "login.title-aal2": "Tweefactorauthenticatie",
3277
+ "login.subtitle-aal2": "Kies een manier om uw tweefactorauthenticatie te voltooien",
3278
+ "login.code.subtitle": "Er wordt een verificatiecode per e-mail verzonden",
3279
+ "login.webauthn.subtitle": "Bereid uw WebAuthN-apparaat voor",
3280
+ "login.totp.subtitle": "Voer de code in die door uw Authenticator-app is gegenereerd",
3281
+ "login.lookup_secret.subtitle": "Voer een van uw 8-cijferige back-up herstelcodes in",
2837
3282
  "login.title-refresh": "Bevestig dat jij het bent",
3283
+ "login.2fa.go-back": "Werkt er iets niet?",
3284
+ "login.2fa.go-back.link": "Ga terug",
3285
+ "login.2fa.method.go-back": "Kies een andere methode",
2838
3286
  "logout.accept-button": "Ja",
2839
3287
  "logout.reject-button": "Nee",
2840
3288
  "logout.title": "Wil je uitloggen?",
@@ -2866,8 +3314,12 @@ var nl_default = {
2866
3314
  "two-step.passkey.title": "Toegangscode (aanbevolen)",
2867
3315
  "two-step.password.description": "Voer uw wachtwoord in dat is gekoppeld aan uw account",
2868
3316
  "two-step.password.title": "Wachtwoord",
2869
- "two-step.webauthn.description": "Gebruik uw beveiligingssleutel om te verifi\xEBren",
2870
3317
  "two-step.webauthn.title": "Beveiligingssleutel",
3318
+ "two-step.webauthn.description": "Gebruik uw beveiligingssleutel om te verifi\xEBren",
3319
+ "two-step.totp.title": "Gebruik uw Authenticator-app (TOTP)",
3320
+ "two-step.totp.description": "Gebruik een 6-cijferige eenmalige code van uw authenticator-app",
3321
+ "two-step.lookup_secret.title": "Herstelcode",
3322
+ "two-step.lookup_secret.description": "Gebruik een van uw 8-cijferige back-upcodes om te authenticeren",
2871
3323
  "identities.messages.1010023": "",
2872
3324
  "identities.messages.1070014": "",
2873
3325
  "identities.messages.1070015": "",
@@ -2942,7 +3394,27 @@ var nl_default = {
2942
3394
  "property.identifier": "",
2943
3395
  "property.password": "",
2944
3396
  "property.phone": "",
2945
- "property.username": ""
3397
+ "property.username": "",
3398
+ "consent.title": "Autoriseren {party}",
3399
+ "consent.subtitle": "Een derde partij applicatie wil toegang tot informatie die aan uw account {identifier} is gekoppeld.",
3400
+ "consent.scope.openid.title": "Identiteit",
3401
+ "consent.scope.openid.description": "Stelt de applicatie in staat uw identiteit te verifi\xEBren. Dit is vereist voor authenticatie en een betrouwbare inlogervaring.",
3402
+ "consent.scope.offline_access.title": "Offline toegang",
3403
+ "consent.scope.offline_access.description": "Stelt deze applicatie in staat u ingelogd te houden, zelfs wanneer u deze niet actief gebruikt.",
3404
+ "consent.scope.profile.title": "Profielinformatie",
3405
+ "consent.scope.profile.description": "Geeft toegang tot uw basisprofielgegevens, inclusief uw gebruikersnaam, voornaam en achternaam.",
3406
+ "consent.scope.email.title": "E-mailadres",
3407
+ "consent.scope.email.description": "Haal uw e-mailadres en de verificatiestatus ervan op.",
3408
+ "consent.scope.address.title": "Fysiek adres",
3409
+ "consent.scope.address.description": "Toegang tot uw postadres.",
3410
+ "consent.scope.phone.title": "Telefoonnummer",
3411
+ "consent.scope.phone.description": "Haal uw telefoonnummer en de verificatiestatus ervan op.",
3412
+ "error.action.go-back": "",
3413
+ "error.footer.copy": "",
3414
+ "error.footer.text": "",
3415
+ "error.title.what-can-i-do": "",
3416
+ "error.title.what-happened": "",
3417
+ "error.instructions": ""
2946
3418
  };
2947
3419
 
2948
3420
  // src/locales/pl.json
@@ -2968,9 +3440,9 @@ var pl_default = {
2968
3440
  "identities.messages.1010005": "Zweryifkuj",
2969
3441
  "identities.messages.1010006": "Kod autentykacyjny",
2970
3442
  "identities.messages.1010007": "Zapasowe kody odzyskiwania",
2971
- "identities.messages.1010008": "U\u017Cyj klucza bezpiecze\u0144stwa",
2972
- "identities.messages.1010009": "U\u017Cyj Autentykatora",
2973
- "identities.messages.1010010": "U\u017Cyj zapasowych kod\xF3w odzyskiwania",
3443
+ "identities.messages.1010008": "Kontynuuj z kluczem sprz\u0119towym",
3444
+ "identities.messages.1010009": "Kontynuuj",
3445
+ "identities.messages.1010010": "Kontynuuj",
2974
3446
  "identities.messages.1010011": "Kontynuuj za pomoc\u0105 klucza bezpiecze\u0144stwa",
2975
3447
  "identities.messages.1010012": "Przygotuj swoje urz\u0105dzenie WebAuthn (np. klucz bezpiecze\u0144stwa, czytnik biometryczny, ...) a nast\u0119pnie kliknij kontynuuj.",
2976
3448
  "identities.messages.1010013": "Kontynuuj",
@@ -3086,8 +3558,16 @@ var pl_default = {
3086
3558
  "login.registration-label": "Nie posiadasz konta?",
3087
3559
  "login.subtitle-oauth2": "Do autentykacji {clientName}",
3088
3560
  "login.title": "Zaloguj si\u0119",
3089
- "login.title-aal2": "Autentykacja Dwu-Etapowa",
3561
+ "login.title-aal2": "Uwierzytelnianie dwusk\u0142adnikowe",
3562
+ "login.subtitle-aal2": "Wybierz spos\xF3b, aby zako\u0144czy\u0107 uwierzytelnianie dwusk\u0142adnikowe",
3563
+ "login.code.subtitle": "Kod weryfikacyjny zostanie wys\u0142any e-mailem",
3564
+ "login.webauthn.subtitle": "Prosz\u0119 przygotowa\u0107 urz\u0105dzenie WebAuthN",
3565
+ "login.totp.subtitle": "Prosz\u0119 wprowadzi\u0107 kod wygenerowany przez Twoj\u0105 aplikacj\u0119 uwierzytelniaj\u0105c\u0105",
3566
+ "login.lookup_secret.subtitle": "Prosz\u0119 wprowadzi\u0107 jeden z Twoich 8-cyfrowych kod\xF3w odzyskiwania zapasowego",
3090
3567
  "login.title-refresh": "Potwierd\u017A \u017Ce to Ty",
3568
+ "login.2fa.go-back": "Co\u015B nie dzia\u0142a?",
3569
+ "login.2fa.go-back.link": "Wr\xF3\u0107",
3570
+ "login.2fa.method.go-back": "Wybierz inn\u0105 metod\u0119",
3091
3571
  "logout.accept-button": "Tak",
3092
3572
  "logout.reject-button": "Nie",
3093
3573
  "logout.title": "Czy chcesz si\u0119 wylogowa\u0107?",
@@ -3119,8 +3599,12 @@ var pl_default = {
3119
3599
  "two-step.passkey.title": "Klucz dost\u0119pu (zalecany)",
3120
3600
  "two-step.password.description": "Wprowad\u017A has\u0142o powi\u0105zane z twoim kontem",
3121
3601
  "two-step.password.title": "Has\u0142o",
3122
- "two-step.webauthn.description": "U\u017Cyj swojego klucza bezpiecze\u0144stwa do uwierzytelnienia",
3123
3602
  "two-step.webauthn.title": "Klucz bezpiecze\u0144stwa",
3603
+ "two-step.webauthn.description": "U\u017Cyj swojego klucza bezpiecze\u0144stwa do uwierzytelnienia",
3604
+ "two-step.totp.title": "U\u017Cyj swojej aplikacji uwierzytelniaj\u0105cej (TOTP)",
3605
+ "two-step.totp.description": "U\u017Cyj 6-cyfrowego jednorazowego kodu z Twojej aplikacji uwierzytelniaj\u0105cej",
3606
+ "two-step.lookup_secret.title": "Kod odzyskiwania zapasowego",
3607
+ "two-step.lookup_secret.description": "U\u017Cyj jednego z Twoich 8-cyfrowych kod\xF3w zapasowych, aby si\u0119 uwierzytelni\u0107",
3124
3608
  "identities.messages.1010016": "",
3125
3609
  "identities.messages.1010017": "",
3126
3610
  "identities.messages.1010018": "",
@@ -3195,7 +3679,27 @@ var pl_default = {
3195
3679
  "property.password": "",
3196
3680
  "property.phone": "",
3197
3681
  "property.username": "",
3198
- "property.identifier": ""
3682
+ "property.identifier": "",
3683
+ "consent.title": "Autoryzuj {party}",
3684
+ "consent.subtitle": "Aplikacja trzeciej strony chce uzyska\u0107 dost\u0119p do informacji powi\u0105zanych z Twoim kontem {identifier}.",
3685
+ "consent.scope.openid.title": "To\u017Csamo\u015B\u0107",
3686
+ "consent.scope.openid.description": "Pozwala aplikacji zweryfikowa\u0107 Twoj\u0105 to\u017Csamo\u015B\u0107. Jest to wymagane do uwierzytelniania i zapewnienia zaufanej sesji logowania.",
3687
+ "consent.scope.offline_access.title": "Dost\u0119p offline",
3688
+ "consent.scope.offline_access.description": "Pozwala aplikacji utrzyma\u0107 Twoje logowanie, nawet gdy nie korzystasz z niej aktywnie.",
3689
+ "consent.scope.profile.title": "Informacje profilowe",
3690
+ "consent.scope.profile.description": "Pozwala na dost\u0119p do podstawowych danych profilowych, w tym nazwy u\u017Cytkownika, imienia i nazwiska.",
3691
+ "consent.scope.email.title": "Adres e-mail",
3692
+ "consent.scope.email.description": "Pobierz sw\xF3j adres e-mail oraz status jego weryfikacji.",
3693
+ "consent.scope.address.title": "Adres fizyczny",
3694
+ "consent.scope.address.description": "Dost\u0119p do Twojego adresu pocztowego.",
3695
+ "consent.scope.phone.title": "Numer telefonu",
3696
+ "consent.scope.phone.description": "Pobierz sw\xF3j numer telefonu oraz status jego weryfikacji.",
3697
+ "error.action.go-back": "",
3698
+ "error.footer.copy": "",
3699
+ "error.footer.text": "",
3700
+ "error.title.what-can-i-do": "",
3701
+ "error.title.what-happened": "",
3702
+ "error.instructions": ""
3199
3703
  };
3200
3704
 
3201
3705
  // src/locales/pt.json
@@ -3221,9 +3725,9 @@ var pt_default = {
3221
3725
  "identities.messages.1010005": "Verificar",
3222
3726
  "identities.messages.1010006": "C\xF3digo de Autentica\xE7\xE3o",
3223
3727
  "identities.messages.1010007": "C\xF3digo de Recupera\xE7\xE3o de Backup",
3224
- "identities.messages.1010008": "Usar chave de seguran\xE7a",
3225
- "identities.messages.1010009": "Usar o Autenticador",
3226
- "identities.messages.1010010": "Usar c\xF3digo de recupera\xE7\xE3o de backup",
3728
+ "identities.messages.1010008": "Continuar com chave de hardware",
3729
+ "identities.messages.1010009": "Continuar",
3730
+ "identities.messages.1010010": "Continuar",
3227
3731
  "identities.messages.1010011": "Continuar com a chave de seguran\xE7a",
3228
3732
  "identities.messages.1010012": "Prepare o seu dispositivo WebAuthn (por exemplo, chave de seguran\xE7a, scanner biom\xE9trico, ...) e pressione continuar.",
3229
3733
  "identities.messages.1010013": "Continuar",
@@ -3339,8 +3843,16 @@ var pt_default = {
3339
3843
  "login.registration-label": "N\xE3o tem uma conta?",
3340
3844
  "login.subtitle-oauth2": "Para autenticar {clientName}",
3341
3845
  "login.title": "Entrar",
3342
- "login.title-aal2": "Autentica\xE7\xE3o de Dois Fatores",
3846
+ "login.title-aal2": "Autentica\xE7\xE3o de dois fatores",
3847
+ "login.subtitle-aal2": "Escolha uma forma de completar sua autentica\xE7\xE3o de segundo fator",
3848
+ "login.code.subtitle": "Um c\xF3digo de verifica\xE7\xE3o ser\xE1 enviado por e-mail",
3849
+ "login.webauthn.subtitle": "Por favor, prepare seu dispositivo WebAuthN",
3850
+ "login.totp.subtitle": "Digite o c\xF3digo gerado pelo seu aplicativo autenticador",
3851
+ "login.lookup_secret.subtitle": "Digite um dos seus c\xF3digos de recupera\xE7\xE3o de 8 d\xEDgitos",
3343
3852
  "login.title-refresh": "Confirme que \xE9 voc\xEA",
3853
+ "login.2fa.go-back": "Algo n\xE3o est\xE1 funcionando?",
3854
+ "login.2fa.go-back.link": "Voltar",
3855
+ "login.2fa.method.go-back": "Escolher outro m\xE9todo",
3344
3856
  "logout.accept-button": "Sim",
3345
3857
  "logout.reject-button": "N\xE3o",
3346
3858
  "logout.title": "Deseja sair?",
@@ -3372,8 +3884,12 @@ var pt_default = {
3372
3884
  "two-step.passkey.title": "Chave de acesso (recomendado)",
3373
3885
  "two-step.password.description": "Insira a sua senha associada \xE0 sua conta",
3374
3886
  "two-step.password.title": "Senha",
3375
- "two-step.webauthn.description": "Use sua chave de seguran\xE7a para autenticar",
3376
3887
  "two-step.webauthn.title": "Chave de Seguran\xE7a",
3888
+ "two-step.webauthn.description": "Use sua chave de seguran\xE7a para autenticar",
3889
+ "two-step.totp.title": "Use seu aplicativo autenticador (TOTP)",
3890
+ "two-step.totp.description": "Use um c\xF3digo \xFAnico de 6 d\xEDgitos do seu aplicativo autenticador",
3891
+ "two-step.lookup_secret.title": "C\xF3digo de recupera\xE7\xE3o de backup",
3892
+ "two-step.lookup_secret.description": "Use um dos seus c\xF3digos de backup de 8 d\xEDgitos para autenticar",
3377
3893
  "identities.messages.1010016": "",
3378
3894
  "identities.messages.1010017": "",
3379
3895
  "identities.messages.1010018": "",
@@ -3448,7 +3964,27 @@ var pt_default = {
3448
3964
  "property.identifier": "",
3449
3965
  "property.password": "",
3450
3966
  "property.phone": "",
3451
- "property.username": ""
3967
+ "property.username": "",
3968
+ "consent.title": "Autorizar {party}",
3969
+ "consent.subtitle": "Um aplicativo de terceiros deseja acessar as informa\xE7\xF5es associadas \xE0 sua conta {identifier}.",
3970
+ "consent.scope.openid.title": "Identidade",
3971
+ "consent.scope.openid.description": "Permite que a aplica\xE7\xE3o verifique sua identidade. Isso \xE9 necess\xE1rio para a autentica\xE7\xE3o e uma experi\xEAncia de login confi\xE1vel.",
3972
+ "consent.scope.offline_access.title": "Acesso Offline",
3973
+ "consent.scope.offline_access.description": "Permite que este aplicativo mantenha voc\xEA conectado mesmo quando n\xE3o estiver usando-o ativamente.",
3974
+ "consent.scope.profile.title": "Informa\xE7\xF5es do Perfil",
3975
+ "consent.scope.profile.description": "Permite o acesso aos detalhes b\xE1sicos do seu perfil, incluindo seu nome de usu\xE1rio, primeiro nome e sobrenome.",
3976
+ "consent.scope.email.title": "Endere\xE7o de E-mail",
3977
+ "consent.scope.email.description": "Recupere seu endere\xE7o de e-mail e seu status de verifica\xE7\xE3o.",
3978
+ "consent.scope.address.title": "Endere\xE7o F\xEDsico",
3979
+ "consent.scope.address.description": "Acesse seu endere\xE7o postal.",
3980
+ "consent.scope.phone.title": "N\xFAmero de Telefone",
3981
+ "consent.scope.phone.description": "Recupere seu n\xFAmero de telefone e seu status de verifica\xE7\xE3o.",
3982
+ "error.action.go-back": "",
3983
+ "error.footer.copy": "",
3984
+ "error.footer.text": "",
3985
+ "error.title.what-can-i-do": "",
3986
+ "error.title.what-happened": "",
3987
+ "error.instructions": ""
3452
3988
  };
3453
3989
 
3454
3990
  // src/locales/sv.json
@@ -3474,9 +4010,9 @@ var sv_default = {
3474
4010
  "identities.messages.1010005": "Verifiera",
3475
4011
  "identities.messages.1010006": "Autentiseringskod",
3476
4012
  "identities.messages.1010007": "\xC5terst\xE4llningskod f\xF6r backup",
3477
- "identities.messages.1010008": "Anv\xE4nd s\xE4kerhetsnyckel",
3478
- "identities.messages.1010009": "Anv\xE4nd autentiserings-app",
3479
- "identities.messages.1010010": "Anv\xE4nd reserv\xE5terst\xE4llningskod",
4013
+ "identities.messages.1010008": "Forts\xE4tt med s\xE4kerhetsnyckel",
4014
+ "identities.messages.1010009": "Forts\xE4tt",
4015
+ "identities.messages.1010010": "Forts\xE4tt",
3480
4016
  "identities.messages.1010011": "Forts\xE4tt med s\xE4kerhetsnyckel",
3481
4017
  "identities.messages.1010012": "F\xF6rbered din WebAuthn-enhet (t.ex. s\xE4kerhetsnyckel, biometriska skanner, ...) och tryck p\xE5 forts\xE4tt.",
3482
4018
  "identities.messages.1010013": "Forts\xE4tt",
@@ -3611,7 +4147,15 @@ var sv_default = {
3611
4147
  "login.subtitle-oauth2": "Att autentisera {clientName}",
3612
4148
  "login.title": "Logga in",
3613
4149
  "login.title-aal2": "Tv\xE5faktorsautentisering",
4150
+ "login.subtitle-aal2": "V\xE4lj ett s\xE4tt att slutf\xF6ra din tv\xE5faktorsautentisering",
4151
+ "login.code.subtitle": "En verifieringskod kommer att skickas via e-post",
4152
+ "login.webauthn.subtitle": "F\xF6rbered din WebAuthN-enhet",
4153
+ "login.totp.subtitle": "Ange koden som genererats av din autentiseringsapp",
4154
+ "login.lookup_secret.subtitle": "Ange en av dina 8-siffriga \xE5terst\xE4llningskoder",
3614
4155
  "login.title-refresh": "Bekr\xE4fta att det \xE4r du",
4156
+ "login.2fa.go-back": "N\xE5got fungerar inte?",
4157
+ "login.2fa.go-back.link": "G\xE5 tillbaka",
4158
+ "login.2fa.method.go-back": "V\xE4lj en annan metod",
3615
4159
  "logout.accept-button": "Ja",
3616
4160
  "logout.reject-button": "Nej",
3617
4161
  "logout.title": "Vill du logga ut?",
@@ -3643,8 +4187,12 @@ var sv_default = {
3643
4187
  "two-step.passkey.title": "Passerkod (rekommenderad)",
3644
4188
  "two-step.password.description": "Ange ditt l\xF6senord kopplat till ditt konto",
3645
4189
  "two-step.password.title": "L\xF6senord",
3646
- "two-step.webauthn.description": "Anv\xE4nd din s\xE4kerhetsnyckel f\xF6r att autentisera",
3647
4190
  "two-step.webauthn.title": "S\xE4kerhetsnyckel",
4191
+ "two-step.webauthn.description": "Anv\xE4nd din s\xE4kerhetsnyckel f\xF6r att autentisera",
4192
+ "two-step.totp.title": "Anv\xE4nd din autentiseringsapp (TOTP)",
4193
+ "two-step.totp.description": "Anv\xE4nd en 6-siffrig eng\xE5ngskod fr\xE5n din autentiseringsapp",
4194
+ "two-step.lookup_secret.title": "Reserv\xE5terst\xE4llningskod",
4195
+ "two-step.lookup_secret.description": "Anv\xE4nd en av dina 8-siffriga reservkoder f\xF6r att autentisera",
3648
4196
  "identities.messages.4000037": "Detta konto finns inte eller har ingen inloggningsmetod konfigurerad.",
3649
4197
  "identities.messages.4000038": "Captcha-verifiering misslyckades, f\xF6rs\xF6k igen.",
3650
4198
  "identities.messages.1010020": "",
@@ -3701,7 +4249,27 @@ var sv_default = {
3701
4249
  "property.phone": "telefon",
3702
4250
  "property.username": "anv\xE4ndarnamn",
3703
4251
  "property.identifier": "identifier",
3704
- "property.code": "kod"
4252
+ "property.code": "kod",
4253
+ "consent.title": "Auktorisera {party}",
4254
+ "consent.subtitle": "En tredjepartsapplikation vill f\xE5 tillg\xE5ng till information kopplad till ditt konto {identifier}.",
4255
+ "consent.scope.openid.title": "Identitet",
4256
+ "consent.scope.openid.description": "G\xF6r det m\xF6jligt f\xF6r applikationen att verifiera din identitet. Detta kr\xE4vs f\xF6r autentisering och en p\xE5litlig inloggningsupplevelse.",
4257
+ "consent.scope.offline_access.title": "Offline-\xE5tkomst",
4258
+ "consent.scope.offline_access.description": "G\xF6r det m\xF6jligt f\xF6r denna applikation att h\xE5lla dig inloggad \xE4ven n\xE4r du inte aktivt anv\xE4nder den.",
4259
+ "consent.scope.profile.title": "Profilinformation",
4260
+ "consent.scope.profile.description": "Ger tillg\xE5ng till dina grundl\xE4ggande profiluppgifter, inklusive ditt anv\xE4ndarnamn, f\xF6rnamn och efternamn.",
4261
+ "consent.scope.email.title": "E-postadress",
4262
+ "consent.scope.email.description": "H\xE4mta din e-postadress och dess verifieringsstatus.",
4263
+ "consent.scope.address.title": "Fysisk adress",
4264
+ "consent.scope.address.description": "F\xE5 \xE5tkomst till din postadress.",
4265
+ "consent.scope.phone.title": "Telefonnummer",
4266
+ "consent.scope.phone.description": "H\xE4mta ditt telefonnummer och dess verifieringsstatus.",
4267
+ "error.action.go-back": "",
4268
+ "error.footer.copy": "",
4269
+ "error.footer.text": "",
4270
+ "error.title.what-can-i-do": "",
4271
+ "error.title.what-happened": "",
4272
+ "error.instructions": ""
3705
4273
  };
3706
4274
 
3707
4275
  // src/locales/index.ts
@@ -3722,6 +4290,7 @@ exports.OryCardContent = OryCardContent;
3722
4290
  exports.OryCardFooter = OryCardFooter;
3723
4291
  exports.OryCardHeader = OryCardHeader;
3724
4292
  exports.OryCardValidationMessages = OryCardValidationMessages;
4293
+ exports.OryConsentCard = OryConsentCard;
3725
4294
  exports.OryForm = OryForm;
3726
4295
  exports.OryFormGroupDivider = OryFormGroupDivider;
3727
4296
  exports.OryFormGroups = OryFormGroups;