@ory/elements-react 0.0.0-pr.4a28a8f → 0.0.0-pr.5cdcf132

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.
package/dist/index.js CHANGED
@@ -94,28 +94,10 @@ function OryComponentProvider({
94
94
  }
95
95
  );
96
96
  }
97
- function isChoosingMethod(flow) {
98
- return flow.flow.ui.nodes.some(
99
- (node) => "name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous"
100
- ) || flow.flow.ui.nodes.some(
101
- (node) => node.group === clientFetch.UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
102
- ) || flow.flowType === clientFetch.FlowType.Login && flow.flow.requested_aal === "aal2";
103
- }
104
- function removeSsoNodes(nodes) {
105
- return nodes.filter(
106
- (node) => !(node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml)
107
- );
108
- }
109
- function getFinalNodes(uniqueGroups, selectedGroup) {
110
- var _a, _b, _c, _d;
111
- const selectedNodes = selectedGroup ? (_a = uniqueGroups[selectedGroup]) != null ? _a : [] : [];
112
- return [
113
- ...(_b = uniqueGroups == null ? void 0 : uniqueGroups.identifier_first) != null ? _b : [],
114
- ...(_c = uniqueGroups == null ? void 0 : uniqueGroups.default) != null ? _c : [],
115
- ...(_d = uniqueGroups == null ? void 0 : uniqueGroups.captcha) != null ? _d : []
116
- ].flat().filter(
117
- (node) => "type" in node.attributes && node.attributes.type === "hidden"
118
- ).concat(selectedNodes);
97
+
98
+ // src/theme/default/utils/form.ts
99
+ function isGroupImmediateSubmit(group) {
100
+ return group === "code";
119
101
  }
120
102
  function triggerToWindowCall(trigger) {
121
103
  if (!trigger) {
@@ -189,21 +171,32 @@ function nodesToAuthMethodGroups(nodes, excludeAuthMethods = []) {
189
171
  ].includes(group)
190
172
  );
191
173
  }
192
- function useNodesGroups(nodes) {
174
+ function useNodesGroups(nodes, { omit } = {}) {
193
175
  const groupSorter = useGroupSorter();
194
176
  const groups = react.useMemo(() => {
195
- var _a;
177
+ var _a, _b;
196
178
  const groups2 = {};
179
+ const groupRetained = {};
197
180
  for (const node of nodes) {
198
- if (node.type === "script") {
199
- continue;
200
- }
201
181
  const groupNodes = (_a = groups2[node.group]) != null ? _a : [];
202
182
  groupNodes.push(node);
203
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;
204
191
  }
205
- return groups2;
206
- }, [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]);
207
200
  const entries = react.useMemo(
208
201
  () => Object.entries(groups).sort(([a], [b]) => groupSorter(a, b)),
209
202
  [groups, groupSorter]
@@ -216,6 +209,93 @@ function useNodesGroups(nodes) {
216
209
  var findNode = (nodes, opt) => nodes.find((n) => {
217
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);
218
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
+ };
219
299
 
220
300
  // src/context/form-state.ts
221
301
  function findMethodWithMessage(nodes) {
@@ -263,6 +343,8 @@ function parseStateFromFlow(flow) {
263
343
  break;
264
344
  case clientFetch.FlowType.Settings:
265
345
  return { current: "settings" };
346
+ case clientFetch.FlowType.OAuth2Consent:
347
+ return { current: "method_active", method: "oauth2_consent" };
266
348
  }
267
349
  console.warn(
268
350
  `[Ory/Elements React] Encountered an unknown form state on ${flow.flowType} flow with ID ${flow.flow.id}`
@@ -376,6 +458,22 @@ function computeDefaultValues(nodes) {
376
458
  if (attrs.name === "method" || attrs.type === "submit" || typeof attrs.value === "undefined") {
377
459
  return acc;
378
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
+ }
379
477
  return unrollTrait(
380
478
  {
381
479
  name: attrs.name,
@@ -463,11 +561,6 @@ function OryCardContent({ children }) {
463
561
  const { Card } = useComponents();
464
562
  return /* @__PURE__ */ jsxRuntime.jsx(Card.Content, { children });
465
563
  }
466
-
467
- // src/theme/default/utils/form.ts
468
- function isGroupImmediateSubmit(group) {
469
- return group === "code";
470
- }
471
564
  function frontendClient(sdkUrl, opts = {}) {
472
565
  const config = new clientFetch.Configuration({
473
566
  ...opts,
@@ -825,6 +918,19 @@ function useOryFormSubmit(onAfterSubmit) {
825
918
  });
826
919
  break;
827
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
+ }
828
934
  }
829
935
  if ("password" in data) {
830
936
  methods.setValue("password", "");
@@ -839,7 +945,11 @@ function useOryFormSubmit(onAfterSubmit) {
839
945
  };
840
946
  return onSubmit;
841
947
  }
842
- function OryForm({ children, onAfterSubmit }) {
948
+ function OryForm({
949
+ children,
950
+ onAfterSubmit,
951
+ "data-testid": dataTestId
952
+ }) {
843
953
  const { Form } = useComponents();
844
954
  const flowContainer = useOryFlow();
845
955
  const methods = reactHookForm.useFormContext();
@@ -848,6 +958,9 @@ function OryForm({ children, onAfterSubmit }) {
848
958
  const onSubmit = useOryFormSubmit(onAfterSubmit);
849
959
  const hasMethods = flowContainer.flow.ui.nodes.some((node) => {
850
960
  if (clientFetch.isUiNodeInputAttributes(node.attributes)) {
961
+ if (node.attributes.type === "hidden") {
962
+ return false;
963
+ }
851
964
  return node.attributes.name !== "csrf_token";
852
965
  } else if (clientFetch.isUiNodeAnchorAttributes(node.attributes)) {
853
966
  return true;
@@ -867,17 +980,15 @@ function OryForm({ children, onAfterSubmit }) {
867
980
  }),
868
981
  type: "error"
869
982
  };
870
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
871
- /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: m }, m.id) }),
872
- /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
873
- ] });
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) }) });
874
984
  }
875
- if (flowContainer.flowType === clientFetch.FlowType.Login && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
985
+ if ((flowContainer.flowType === clientFetch.FlowType.Login || flowContainer.flowType === clientFetch.FlowType.Registration) && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
876
986
  methods.setValue("method", "code");
877
987
  }
878
988
  return /* @__PURE__ */ jsxRuntime.jsx(
879
989
  Form.Root,
880
990
  {
991
+ "data-testid": dataTestId,
881
992
  action: flowContainer.flow.ui.action,
882
993
  method: flowContainer.flow.ui.method,
883
994
  onSubmit: (e) => void methods.handleSubmit(onSubmit)(e),
@@ -912,7 +1023,7 @@ var NodeInput = ({
912
1023
  }) => {
913
1024
  var _a;
914
1025
  const { Node: Node2 } = useComponents();
915
- const { setValue } = reactHookForm.useFormContext();
1026
+ const { setValue, watch } = reactHookForm.useFormContext();
916
1027
  const {
917
1028
  onloadTrigger,
918
1029
  onclickTrigger,
@@ -925,7 +1036,7 @@ var NodeInput = ({
925
1036
  const isResendNode = ((_a = node.meta.label) == null ? void 0 : _a.id) === 1070008;
926
1037
  const isScreenSelectionNode = "name" in node.attributes && node.attributes.name === "screen";
927
1038
  const setFormValue = () => {
928
- if (attrs.value && !(isResendNode || isScreenSelectionNode)) {
1039
+ if (attrs.value && !(isResendNode || isScreenSelectionNode || node.group === clientFetch.UiNodeGroupEnum.Oauth2Consent)) {
929
1040
  setValue(attrs.name, attrs.value);
930
1041
  }
931
1042
  };
@@ -950,6 +1061,19 @@ var NodeInput = ({
950
1061
  };
951
1062
  const isSocial = (attrs.name === "provider" || attrs.name === "link") && (node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml);
952
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
+ };
953
1077
  switch (attributes.type) {
954
1078
  case clientFetch.UiNodeInputAttributesTypeEnum.Submit:
955
1079
  case clientFetch.UiNodeInputAttributesTypeEnum.Button:
@@ -959,6 +1083,9 @@ var NodeInput = ({
959
1083
  if (isResendNode || isScreenSelectionNode) {
960
1084
  return null;
961
1085
  }
1086
+ if (node.group === "oauth2_consent") {
1087
+ return null;
1088
+ }
962
1089
  return /* @__PURE__ */ jsxRuntime.jsx(
963
1090
  Node2.Label,
964
1091
  {
@@ -970,6 +1097,21 @@ var NodeInput = ({
970
1097
  case clientFetch.UiNodeInputAttributesTypeEnum.DatetimeLocal:
971
1098
  throw new Error("Not implemented");
972
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
+ }
973
1115
  return /* @__PURE__ */ jsxRuntime.jsx(
974
1116
  Node2.Label,
975
1117
  {
@@ -1038,7 +1180,7 @@ function OryFormOidcButtons() {
1038
1180
  if (filteredNodes.length === 0) {
1039
1181
  return null;
1040
1182
  }
1041
- 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(
1042
1184
  Node2.OidcButton,
1043
1185
  {
1044
1186
  node,
@@ -1051,34 +1193,119 @@ function OryFormOidcButtons() {
1051
1193
  setValue("method", node.group);
1052
1194
  }
1053
1195
  },
1054
- k
1196
+ clientFetch.getNodeId(node)
1055
1197
  )) });
1056
1198
  }
1057
1199
  function OryFormSocialButtonsForm() {
1058
1200
  const {
1059
1201
  flow: { ui }
1060
1202
  } = useOryFlow();
1061
- const filteredNodes = ui.nodes.filter((node) => node.group === clientFetch.UiNodeGroupEnum.Saml || node.group === clientFetch.UiNodeGroupEnum.Oidc);
1203
+ const filteredNodes = ui.nodes.filter(
1204
+ (node) => node.group === clientFetch.UiNodeGroupEnum.Saml || node.group === clientFetch.UiNodeGroupEnum.Oidc
1205
+ );
1062
1206
  if (filteredNodes.length === 0) {
1063
1207
  return null;
1064
1208
  }
1065
- 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, {}) }) });
1066
1210
  }
1067
- function isUINodeGroupEnum(method) {
1068
- 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
+ ] });
1069
1243
  }
1070
- function OryTwoStepCard() {
1071
- var _a, _b, _c, _d;
1244
+ function OryTwoStepCardStateProvideIdentifier() {
1072
1245
  const { Form, Card } = useComponents();
1073
- const { flow, flowType, formState, dispatchFormState } = useOryFlow();
1074
- const { ui } = flow;
1246
+ const { flowType, flow, dispatchFormState } = useOryFlow();
1075
1247
  const nodeSorter = useNodeSorter();
1076
1248
  const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1077
- const uniqueGroups = useNodesGroups(ui.nodes);
1078
- const options = Object.fromEntries(
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
1252
+ );
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);
1292
+ }
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(
1079
1306
  Object.values(clientFetch.UiNodeGroupEnum).filter((group) => {
1080
- var _a2;
1081
- return (_a2 = uniqueGroups.groups[group]) == null ? void 0 : _a2.length;
1307
+ var _a;
1308
+ return (_a = visibleGroups[group]) == null ? void 0 : _a.length;
1082
1309
  }).filter(
1083
1310
  (group) => ![
1084
1311
  clientFetch.UiNodeGroupEnum.Oidc,
@@ -1090,7 +1317,19 @@ function OryTwoStepCard() {
1090
1317
  ].includes(group)
1091
1318
  ).map((g) => [g, {}])
1092
1319
  );
1093
- if (clientFetch.UiNodeGroupEnum.Code in options) {
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) {
1094
1333
  let identifier = (_b = (_a = findNode(ui.nodes, {
1095
1334
  group: "identifier_first",
1096
1335
  node_type: "input",
@@ -1102,7 +1341,7 @@ function OryTwoStepCard() {
1102
1341
  name: "address"
1103
1342
  })) == null ? void 0 : _c.attributes) == null ? void 0 : _d.value);
1104
1343
  if (identifier) {
1105
- options[clientFetch.UiNodeGroupEnum.Code] = {
1344
+ authMethodBlocks[clientFetch.UiNodeGroupEnum.Code] = {
1106
1345
  title: {
1107
1346
  id: "identities.messages.1010023",
1108
1347
  values: { address: identifier }
@@ -1110,89 +1349,58 @@ function OryTwoStepCard() {
1110
1349
  };
1111
1350
  }
1112
1351
  }
1113
- const nonSsoNodes = removeSsoNodes(ui.nodes);
1114
- const finalNodes = formState.current === "method_active" ? getFinalNodes(uniqueGroups.groups, formState.method) : [];
1115
- const handleAfterFormSubmit = (method) => {
1116
- if (typeof method !== "string" || !isUINodeGroupEnum(method)) {
1117
- return;
1118
- }
1119
- if (isGroupImmediateSubmit(method)) {
1120
- dispatchFormState({
1121
- type: "action_select_method",
1122
- method
1123
- });
1124
- }
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"
1125
1359
  };
1126
- const hasSso = ui.nodes.some(
1127
- (node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
1128
- );
1129
- const showSso = !(formState.current === "method_active" && !(formState.method === clientFetch.UiNodeGroupEnum.Oidc || formState.method === clientFetch.UiNodeGroupEnum.Saml));
1130
- const showSsoDivider = hasSso && nonSsoNodes.filter((n) => {
1131
- if (clientFetch.isUiNodeInputAttributes(n.attributes)) {
1132
- return n.attributes.type !== clientFetch.UiNodeInputAttributesTypeEnum.Hidden;
1133
- } else if (clientFetch.isUiNodeScriptAttributes(n.attributes)) {
1134
- return false;
1135
- }
1136
- return true;
1137
- }).length > 0;
1138
1360
  return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1139
1361
  /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1140
1362
  /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1141
1363
  /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1142
- showSso && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1143
- /* @__PURE__ */ jsxRuntime.jsxs(OryForm, { onAfterSubmit: handleAfterFormSubmit, children: [
1144
- /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1145
- formState.current === "provide_identifier" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1146
- showSsoDivider && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1147
- nonSsoNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1148
- ] }),
1149
- 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: [
1150
1371
  /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1151
1372
  /* @__PURE__ */ jsxRuntime.jsx(
1152
1373
  AuthMethodList,
1153
1374
  {
1154
- options,
1375
+ options: authMethodBlocks,
1155
1376
  setSelectedGroup: (group) => dispatchFormState({
1156
1377
  type: "action_select_method",
1157
1378
  method: group
1158
1379
  })
1159
1380
  }
1160
1381
  ),
1161
- ui.nodes.filter((n) => n.group === clientFetch.UiNodeGroupEnum.Captcha).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1162
- ] }),
1163
- formState.current === "method_active" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1164
- ui.nodes.filter((n) => n.type === "script").map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1165
- finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1382
+ authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1166
1383
  ] })
1167
- ] }),
1168
- /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1169
- ] })
1170
- ] })
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, {})
1171
1388
  ] });
1172
1389
  }
1173
- function AuthMethodList({ options, setSelectedGroup }) {
1174
- const { Card } = useComponents();
1175
- const { setValue, getValues } = reactHookForm.useFormContext();
1176
- const handleClick = (group, options2) => {
1177
- var _a, _b, _c, _d;
1178
- if (isGroupImmediateSubmit(group)) {
1179
- if (group === "code" && !getValues("identifier") && ((_b = (_a = options2 == null ? void 0 : options2.title) == null ? void 0 : _a.values) == null ? void 0 : _b.address)) {
1180
- setValue("identifier", (_d = (_c = options2 == null ? void 0 : options2.title) == null ? void 0 : _c.values) == null ? void 0 : _d.address);
1181
- }
1182
- setValue("method", group);
1183
- } else {
1184
- setSelectedGroup(group);
1185
- }
1186
- };
1187
- return /* @__PURE__ */ jsxRuntime.jsx(Card.AuthMethodListContainer, { children: Object.entries(options).map(([group, options2]) => /* @__PURE__ */ jsxRuntime.jsx(
1188
- Card.AuthMethodListItem,
1189
- {
1190
- group,
1191
- title: options2.title,
1192
- onClick: () => handleClick(group, options2)
1193
- },
1194
- group
1195
- )) });
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
+ ] });
1196
1404
  }
1197
1405
  function OryFormGroups({ groups }) {
1198
1406
  const {
@@ -1202,8 +1410,8 @@ function OryFormGroups({ groups }) {
1202
1410
  const { flowType } = useOryFlow();
1203
1411
  const { Form } = useComponents();
1204
1412
  const nodes = ui.nodes.filter((node) => groups.indexOf(node.group) > -1).sort((a, b) => nodeSorter(a, b, { flowType }));
1205
- return /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: nodes.map((node, k) => {
1206
- 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));
1207
1415
  }) });
1208
1416
  }
1209
1417
  function OryFormSection({
@@ -1232,6 +1440,19 @@ function OryFormSectionInner({
1232
1440
  }
1233
1441
  );
1234
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
+ }
1235
1456
  function OryFormGroupDivider() {
1236
1457
  const { Card } = useComponents();
1237
1458
  const {
@@ -1585,16 +1806,19 @@ function SettingsSectionContent({ group, nodes }) {
1585
1806
  const { Card } = useComponents();
1586
1807
  const intl = reactIntl.useIntl();
1587
1808
  const { flow } = useOryFlow();
1588
- 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
+ });
1589
1813
  if (group === clientFetch.UiNodeGroupEnum.Totp) {
1590
1814
  return /* @__PURE__ */ jsxRuntime.jsxs(
1591
1815
  OryFormSection,
1592
1816
  {
1593
- nodes: uniqueGroups.groups.totp,
1817
+ nodes: groupedNodes.groups.totp,
1594
1818
  "data-testid": "ory/screen/settings/group/totp",
1595
1819
  children: [
1596
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsTotp, { nodes: (_a = uniqueGroups.groups.totp) != null ? _a : [] }),
1597
- (_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)))
1598
1822
  ]
1599
1823
  }
1600
1824
  );
@@ -1603,16 +1827,16 @@ function SettingsSectionContent({ group, nodes }) {
1603
1827
  return /* @__PURE__ */ jsxRuntime.jsxs(
1604
1828
  OryFormSection,
1605
1829
  {
1606
- nodes: uniqueGroups.groups.lookup_secret,
1830
+ nodes: groupedNodes.groups.lookup_secret,
1607
1831
  "data-testid": "ory/screen/settings/group/lookup_secret",
1608
1832
  children: [
1609
1833
  /* @__PURE__ */ jsxRuntime.jsx(
1610
1834
  OrySettingsRecoveryCodes,
1611
1835
  {
1612
- nodes: (_c = uniqueGroups.groups.lookup_secret) != null ? _c : []
1836
+ nodes: (_c = groupedNodes.groups.lookup_secret) != null ? _c : []
1613
1837
  }
1614
1838
  ),
1615
- (_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)))
1616
1840
  ]
1617
1841
  }
1618
1842
  );
@@ -1621,11 +1845,11 @@ function SettingsSectionContent({ group, nodes }) {
1621
1845
  return /* @__PURE__ */ jsxRuntime.jsxs(
1622
1846
  OryFormSection,
1623
1847
  {
1624
- nodes: uniqueGroups.groups.oidc,
1848
+ nodes: groupedNodes.groups.oidc,
1625
1849
  "data-testid": "ory/screen/settings/group/oidc",
1626
1850
  children: [
1627
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsOidc, { nodes: (_e = uniqueGroups.groups.oidc) != null ? _e : [] }),
1628
- (_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)))
1629
1853
  ]
1630
1854
  }
1631
1855
  );
@@ -1634,11 +1858,11 @@ function SettingsSectionContent({ group, nodes }) {
1634
1858
  return /* @__PURE__ */ jsxRuntime.jsxs(
1635
1859
  OryFormSection,
1636
1860
  {
1637
- nodes: uniqueGroups.groups.webauthn,
1861
+ nodes: groupedNodes.groups.webauthn,
1638
1862
  "data-testid": "ory/screen/settings/group/webauthn",
1639
1863
  children: [
1640
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsWebauthn, { nodes: (_g = uniqueGroups.groups.webauthn) != null ? _g : [] }),
1641
- (_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)))
1642
1866
  ]
1643
1867
  }
1644
1868
  );
@@ -1647,11 +1871,11 @@ function SettingsSectionContent({ group, nodes }) {
1647
1871
  return /* @__PURE__ */ jsxRuntime.jsxs(
1648
1872
  OryFormSection,
1649
1873
  {
1650
- nodes: uniqueGroups.groups.passkey,
1874
+ nodes: groupedNodes.groups.passkey,
1651
1875
  "data-testid": "ory/screen/settings/group/passkey",
1652
1876
  children: [
1653
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsPasskey, { nodes: (_i = uniqueGroups.groups.passkey) != null ? _i : [] }),
1654
- (_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)))
1655
1879
  ]
1656
1880
  }
1657
1881
  );
@@ -1672,30 +1896,30 @@ function SettingsSectionContent({ group, nodes }) {
1672
1896
  id: `settings.${group}.description`
1673
1897
  }),
1674
1898
  children: [
1675
- (_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))),
1676
1900
  nodes.filter(
1677
1901
  (node) => "type" in node.attributes && node.attributes.type !== "submit"
1678
- ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1902
+ ).map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1679
1903
  ]
1680
1904
  }
1681
1905
  ),
1682
1906
  /* @__PURE__ */ jsxRuntime.jsx(Card.SettingsSectionFooter, { children: nodes.filter(
1683
1907
  (node) => "type" in node.attributes && node.attributes.type === "submit"
1684
- ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)) })
1908
+ ).map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node))) })
1685
1909
  ]
1686
1910
  }
1687
1911
  );
1688
1912
  }
1689
- var getScriptNode = (nodes) => nodes.find(
1690
- (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"
1691
1915
  );
1692
1916
  function OrySettingsCard() {
1693
1917
  const { flow } = useOryFlow();
1694
- const uniqueGroups = useNodesGroups(flow.ui.nodes);
1695
- const scriptNode = getScriptNode(flow.ui.nodes);
1918
+ const uniqueGroups = useNodesGroups(flow.ui.nodes, { omit: ["script"] });
1919
+ const scriptNodes = onlyScriptNodes(flow.ui.nodes);
1696
1920
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1697
1921
  /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1698
- scriptNode && /* @__PURE__ */ jsxRuntime.jsx(Node, { node: scriptNode }),
1922
+ scriptNodes.map((n) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node: n }, clientFetch.getNodeId(n))),
1699
1923
  uniqueGroups.entries.map(([group, nodes]) => {
1700
1924
  if (group === clientFetch.UiNodeGroupEnum.Default) {
1701
1925
  return null;
@@ -2002,9 +2226,11 @@ var en_default = {
2002
2226
  "card.header.parts.oidc": "a social provider",
2003
2227
  "card.header.parts.password.registration": "your {identifierLabel} and a password",
2004
2228
  "card.header.parts.password.login": "your {identifierLabel} and password",
2005
- "card.header.parts.code": "a code sent to your email",
2229
+ "card.header.parts.code": "a code sent to you",
2006
2230
  "card.header.parts.passkey": "a Passkey",
2007
2231
  "card.header.parts.webauthn": "a security key",
2232
+ "card.header.parts.totp": "your authenticator app",
2233
+ "card.header.parts.lookup_secret": "a backup recovery code",
2008
2234
  "card.header.parts.identifier-first": "your {identifierLabel}",
2009
2235
  "card.header.description.login": "Sign in with {identifierLabel}",
2010
2236
  "card.header.description.registration": "Sign up with {identifierLabel}",
@@ -2031,6 +2257,20 @@ var en_default = {
2031
2257
  "property.username": "username",
2032
2258
  "property.identifier": "identifier",
2033
2259
  "property.code": "code",
2260
+ "consent.title": "Authorize {party}",
2261
+ "consent.subtitle": "A third party application wants to access information associated with your account {identifier}.",
2262
+ "consent.scope.openid.title": "Identity",
2263
+ "consent.scope.openid.description": "Allows the application to verify your identity. This is required for authentication and a trusted login experience.",
2264
+ "consent.scope.offline_access.title": "Offline Access",
2265
+ "consent.scope.offline_access.description": "Allows this application to keep you signed in even when you're not actively using it.",
2266
+ "consent.scope.profile.title": "Profile Information",
2267
+ "consent.scope.profile.description": "Allows access to your basic profile details, including your username, first name, and last name.",
2268
+ "consent.scope.email.title": "Email Address",
2269
+ "consent.scope.email.description": "Retrieve your email address and its verification status.",
2270
+ "consent.scope.address.title": "Physical Address",
2271
+ "consent.scope.address.description": "Access your postal address.",
2272
+ "consent.scope.phone.title": "Phone Number",
2273
+ "consent.scope.phone.description": "Retrieve your phone number and its verification status.",
2034
2274
  "error.title.what-happened": "What happened?",
2035
2275
  "error.title.what-can-i-do": "What can I do?",
2036
2276
  "error.instructions": "Please try again in a few minutes or contact the website operator.",
@@ -2207,7 +2447,7 @@ var de_default = {
2207
2447
  "two-step.code.description": "Ein Best\xE4tigungscode wird an Ihre E-Mail gesendet.",
2208
2448
  "two-step.code.title": "E-Mail-Code",
2209
2449
  "two-step.passkey.description": "Verwenden Sie die Fingerabdruck- oder Gesichtserkennung Ihres Ger\xE4ts",
2210
- "two-step.passkey.title": "Passwort (empfohlen)",
2450
+ "two-step.passkey.title": "Passkey (empfohlen)",
2211
2451
  "two-step.password.description": "Geben Sie Ihr Passwort ein, das mit Ihrem Konto verkn\xFCpft ist",
2212
2452
  "two-step.password.title": "Passwort",
2213
2453
  "two-step.webauthn.title": "Sicherheitsschl\xFCssel",
@@ -2223,28 +2463,30 @@ var de_default = {
2223
2463
  "login.cancel-label": "Nicht das richtige Konto?",
2224
2464
  "identities.messages.1010023": "Code an {address} senden",
2225
2465
  "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.",
2226
- "identities.messages.1010017": "",
2227
- "identities.messages.1010018": "",
2228
- "identities.messages.1010019": "",
2466
+ "identities.messages.1010017": "Anmelden und verbinden",
2467
+ "identities.messages.1010018": "Mit {provider} best\xE4tigen",
2468
+ "identities.messages.1010019": "Code senden um fortzufahren",
2229
2469
  "identities.messages.1010020": "",
2230
- "identities.messages.1010021": "",
2231
- "identities.messages.1010022": "",
2232
- "identities.messages.1040007": "",
2233
- "identities.messages.1040008": "",
2234
- "identities.messages.1040009": "",
2470
+ "identities.messages.1010021": "Mit Paskey anmelden",
2471
+ "identities.messages.1010022": "Mit Passwort anmelden",
2472
+ "identities.messages.1040007": "Mit Passkey registrieren",
2473
+ "identities.messages.1040008": "Zur\xFCck",
2474
+ "identities.messages.1040009": "Bitte w\xE4hlen Sie eine Authentifizierungsmethode, um fortzufahren.",
2235
2475
  "identities.messages.1050019": "Passkey hinzuf\xFCgen",
2236
- "identities.messages.1050020": "",
2237
- "identities.messages.4000037": "",
2238
- "identities.messages.4010009": "",
2239
- "identities.messages.4010010": "",
2476
+ "identities.messages.1050020": 'Passkey "{display_name}" entfernen',
2477
+ "identities.messages.4000037": "F\xFCr die eingegebenen Daten existiert kein Account",
2478
+ "identities.messages.4010009": "Die Authentifizierungsmethode stimmt nicht mit der vorherigen Authentifizierungsmethode \xFCberein. Bitte versuchen Sie es erneut.",
2479
+ "identities.messages.4010010": "Die eingegebene Adresse stimmt nicht mit der Adresse \xFCberein, die Sie bei der Registrierung angegeben haben. Bitte versuchen Sie es erneut.",
2240
2480
  "input.placeholder": "{placeholder} eingeben",
2241
- "card.header.parts.code": "einem Code per E-Mail",
2481
+ "card.header.parts.code": "ein an Sie gesendeter Code",
2242
2482
  "card.header.parts.identifier-first": "Ihr {identifierLabel}",
2243
2483
  "card.header.parts.oidc": "ein sozialer Anbieter",
2244
2484
  "card.header.parts.passkey": "ein Passkey",
2245
2485
  "card.header.parts.password.login": "Ihrer {identifierLabel} und Ihrem Passwort",
2246
2486
  "card.header.parts.password.registration": "Ihrer {identifierLabel} und einem Passwort",
2247
2487
  "card.header.parts.webauthn": "ein Sicherheitsschl\xFCssel",
2488
+ "card.header.parts.totp": "deine Authentifikator-App",
2489
+ "card.header.parts.lookup_secret": "ein Backup-Wiederherstellungscode",
2248
2490
  "recovery.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um einen einmaligen Zugangscode zu erhalten",
2249
2491
  "verification.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um es zu best\xE4tigen",
2250
2492
  "card.header.description.login": "Melden Sie sich mit {identifierLabel} an",
@@ -2302,6 +2544,20 @@ var de_default = {
2302
2544
  "property.phone": "Telefon",
2303
2545
  "property.code": "Code",
2304
2546
  "property.username": "Benutzername",
2547
+ "consent.title": "Autorisieren {party}",
2548
+ "consent.subtitle": "Eine Drittanbieteranwendung m\xF6chte auf Informationen zugreifen, die mit Ihrem Konto {identifier} verkn\xFCpft sind.",
2549
+ "consent.scope.openid.title": "Identit\xE4t",
2550
+ "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.",
2551
+ "consent.scope.offline_access.title": "Offline-Zugriff",
2552
+ "consent.scope.offline_access.description": "Erm\xF6glicht dieser Anwendung, Sie angemeldet zu lassen, auch wenn Sie sie nicht aktiv nutzen.",
2553
+ "consent.scope.profile.title": "Profilinformationen",
2554
+ "consent.scope.profile.description": "Erm\xF6glicht den Zugriff auf Ihre grundlegenden Profildetails, einschlie\xDFlich Ihres Benutzernamens, Vornamens und Nachnamens.",
2555
+ "consent.scope.email.title": "E-Mail-Adresse",
2556
+ "consent.scope.email.description": "Erm\xF6glicht den Abruf Ihrer E-Mail-Adresse und deren \xDCberpr\xFCfungsstatus.",
2557
+ "consent.scope.address.title": "Physische Adresse",
2558
+ "consent.scope.address.description": "Erm\xF6glicht den Zugriff auf Ihre Postanschrift.",
2559
+ "consent.scope.phone.title": "Telefonnummer",
2560
+ "consent.scope.phone.description": "Erm\xF6glicht den Abruf Ihrer Telefonnummer und deren \xDCberpr\xFCfungsstatus.",
2305
2561
  "error.title.what-happened": "Was ist passiert?",
2306
2562
  "error.footer.copy": "Kopieren",
2307
2563
  "error.footer.text": "Bitte f\xFCgen Sie bei der Meldung dieses Fehlers die folgenden Informationen hinzu:",
@@ -2323,7 +2579,6 @@ var es_default = {
2323
2579
  "error.back-button": "Regresar",
2324
2580
  "error.description": "Ocurri\xF3 un error con el siguiente mensaje:",
2325
2581
  "error.support-email-link": "Si el problema persiste, por favor contacte a <a>{contactSupportEmail}</a>",
2326
- "error.title": "",
2327
2582
  "error.title-internal-server-error": "Error Interno del Servidor",
2328
2583
  "error.title-not-found": "404 - P\xE1gina no encontrada",
2329
2584
  "identities.messages.1010001": "Iniciar sesi\xF3n",
@@ -2498,45 +2753,6 @@ var es_default = {
2498
2753
  "two-step.totp.description": "Utilice un c\xF3digo de un solo uso de 6 d\xEDgitos de su aplicaci\xF3n de autenticaci\xF3n",
2499
2754
  "two-step.lookup_secret.title": "C\xF3digo de recuperaci\xF3n de respaldo",
2500
2755
  "two-step.lookup_secret.description": "Utilice uno de sus c\xF3digos de respaldo de 8 d\xEDgitos para autenticarse",
2501
- "identities.messages.1010016": "",
2502
- "identities.messages.1010017": "",
2503
- "identities.messages.1010018": "",
2504
- "identities.messages.1010019": "",
2505
- "identities.messages.1010020": "",
2506
- "identities.messages.1010021": "",
2507
- "identities.messages.1010022": "",
2508
- "identities.messages.1010023": "",
2509
- "identities.messages.1040007": "",
2510
- "identities.messages.1040008": "",
2511
- "identities.messages.1040009": "",
2512
- "identities.messages.1050019": "",
2513
- "identities.messages.1050020": "",
2514
- "identities.messages.1070014": "",
2515
- "identities.messages.1070015": "",
2516
- "identities.messages.4000037": "",
2517
- "identities.messages.4000038": "",
2518
- "identities.messages.4010009": "",
2519
- "identities.messages.4010010": "",
2520
- "login.cancel-button": "",
2521
- "login.cancel-label": "",
2522
- "input.placeholder": "",
2523
- "card.header.description.login": "",
2524
- "card.header.description.registration": "",
2525
- "card.header.parts.code": "",
2526
- "card.header.parts.identifier-first": "",
2527
- "card.header.parts.oidc": "",
2528
- "card.header.parts.passkey": "",
2529
- "card.header.parts.password.login": "",
2530
- "card.header.parts.password.registration": "",
2531
- "card.header.parts.webauthn": "",
2532
- "forms.label.forgot-password": "",
2533
- "login.subtitle": "",
2534
- "login.subtitle-refresh": "",
2535
- "misc.or": "",
2536
- "recovery.subtitle": "",
2537
- "registration.subtitle": "",
2538
- "settings.subtitle": "",
2539
- "verification.subtitle": "",
2540
2756
  "settings.totp.info.linked": "Actualmente tienes una aplicaci\xF3n de autenticaci\xF3n conectada.",
2541
2757
  "settings.totp.info.not-linked": "Para habilitar, escanea el c\xF3digo QR con tu autenticador e ingresa el c\xF3digo.",
2542
2758
  "settings.totp.title": "Aplicaci\xF3n Autenticadora",
@@ -2554,31 +2770,87 @@ var es_default = {
2554
2770
  "settings.profile.title": "Configuraci\xF3n de Perfil",
2555
2771
  "settings.webauthn.description": "Administra la configuraci\xF3n de tu token de hardware",
2556
2772
  "settings.webauthn.title": "Gestionar Tokens de Hardware",
2557
- "settings.oidc.info": "",
2558
- "settings.passkey.info": "",
2559
- "settings.title-lookup-secret": "",
2560
- "settings.title-navigation": "",
2561
- "settings.title-oidc": "",
2562
- "settings.title-passkey": "",
2563
- "settings.title-password": "",
2564
- "settings.title-profile": "",
2565
- "settings.title-totp": "",
2566
- "settings.title-webauthn": "",
2567
- "settings.webauthn.info": "",
2568
- "card.footer.select-another-method": "",
2569
- "account-linking.title": "",
2570
- "property.code": "",
2571
- "property.email": "",
2572
- "property.identifier": "",
2573
- "property.password": "",
2574
- "property.phone": "",
2575
- "property.username": "",
2576
- "error.action.go-back": "",
2577
- "error.footer.copy": "",
2578
- "error.footer.text": "",
2579
- "error.instructions": "",
2580
- "error.title.what-can-i-do": "",
2581
- "error.title.what-happened": ""
2773
+ "consent.title": "Autorizar {party}",
2774
+ "consent.subtitle": "Una aplicaci\xF3n de terceros quiere acceder a la informaci\xF3n asociada a su cuenta {identifier}.",
2775
+ "consent.scope.openid.title": "Identidad",
2776
+ "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.",
2777
+ "consent.scope.offline_access.title": "Acceso sin conexi\xF3n",
2778
+ "consent.scope.offline_access.description": "Permite que esta aplicaci\xF3n le mantenga conectado incluso cuando no la est\xE9 utilizando activamente.",
2779
+ "consent.scope.profile.title": "Informaci\xF3n del perfil",
2780
+ "consent.scope.profile.description": "Permite el acceso a los detalles b\xE1sicos de su perfil, incluyendo su nombre de usuario, nombre y apellido.",
2781
+ "consent.scope.email.title": "Direcci\xF3n de correo electr\xF3nico",
2782
+ "consent.scope.email.description": "Recupere su direcci\xF3n de correo electr\xF3nico y su estado de verificaci\xF3n.",
2783
+ "consent.scope.address.title": "Direcci\xF3n f\xEDsica",
2784
+ "consent.scope.address.description": "Acceda a su direcci\xF3n postal.",
2785
+ "consent.scope.phone.title": "N\xFAmero de tel\xE9fono",
2786
+ "consent.scope.phone.description": "Recupere su n\xFAmero de tel\xE9fono y su estado de verificaci\xF3n.",
2787
+ "error.title": "Ocurri\xF3 un error",
2788
+ "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.',
2789
+ "identities.messages.1010017": "Iniciar sesi\xF3n y vincular",
2790
+ "identities.messages.1010018": "Confirmar con {provider}",
2791
+ "identities.messages.1010019": "Solicitar c\xF3digo para continuar",
2792
+ "identities.messages.1010021": "Iniciar sesi\xF3n con clave de acceso",
2793
+ "identities.messages.1010022": "Iniciar sesi\xF3n con contrase\xF1a",
2794
+ "identities.messages.1010023": "Enviar c\xF3digo a {address}",
2795
+ "identities.messages.1040007": "Registrarse con clave de acceso",
2796
+ "identities.messages.1040008": "Atr\xE1s",
2797
+ "identities.messages.1040009": "Por favor, elige una credencial para autenticarte.",
2798
+ "identities.messages.1050019": "Agregar clave de acceso",
2799
+ "identities.messages.1070014": "Iniciar sesi\xF3n y vincular credencial",
2800
+ "identities.messages.1070015": "Por favor, completa el desaf\xEDo captcha para continuar.",
2801
+ "identities.messages.4000037": "Esta cuenta no existe o no tiene ning\xFAn m\xE9todo de inicio de sesi\xF3n configurado.",
2802
+ "identities.messages.4000038": "Fall\xF3 la verificaci\xF3n de Captcha, por favor intenta de nuevo.",
2803
+ "identities.messages.4010009": "Las credenciales vinculadas no coinciden.",
2804
+ "identities.messages.4010010": "La direcci\xF3n que ingresaste no coincide con ninguna direcci\xF3n conocida en la cuenta actual.",
2805
+ "login.cancel-button": "Cancelar",
2806
+ "login.cancel-label": "\xBFNo es la cuenta correcta?",
2807
+ "login.subtitle": "Iniciar sesi\xF3n con {parts}",
2808
+ "login.subtitle-refresh": "Confirma tu identidad con {parts}",
2809
+ "recovery.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para recibir un c\xF3digo de acceso \xFAnico",
2810
+ "registration.subtitle": "Registrarse con {parts}",
2811
+ "settings.subtitle": "Actualiza la configuraci\xF3n de tu cuenta",
2812
+ "settings.title-lookup-secret": "Administrar c\xF3digos de recuperaci\xF3n de respaldo 2FA",
2813
+ "settings.title-navigation": "Configuraci\xF3n de la cuenta",
2814
+ "settings.title-oidc": "Inicio de sesi\xF3n social",
2815
+ "settings.title-password": "Cambiar contrase\xF1a",
2816
+ "settings.title-profile": "Configuraci\xF3n del perfil",
2817
+ "settings.title-totp": "Administrar la aplicaci\xF3n de autenticaci\xF3n 2FA TOTP",
2818
+ "settings.title-webauthn": "Administrar tokens de hardware",
2819
+ "settings.title-passkey": "Administrar claves de acceso",
2820
+ "verification.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para verificarla",
2821
+ "input.placeholder": "Ingresa tu {placeholder}",
2822
+ "card.header.parts.oidc": "un proveedor social",
2823
+ "card.header.parts.password.registration": "tu {identifierLabel} y una contrase\xF1a",
2824
+ "card.header.parts.password.login": "tu {identifierLabel} y contrase\xF1a",
2825
+ "card.header.parts.code": "un c\xF3digo enviado a tu correo electr\xF3nico",
2826
+ "card.header.parts.passkey": "una clave de acceso",
2827
+ "card.header.parts.webauthn": "una clave de seguridad",
2828
+ "card.header.parts.totp": "su aplicaci\xF3n de autenticaci\xF3n",
2829
+ "card.header.parts.lookup_secret": "un c\xF3digo de recuperaci\xF3n de copia de seguridad",
2830
+ "card.header.parts.identifier-first": "tu {identifierLabel}",
2831
+ "card.header.description.login": "Iniciar sesi\xF3n con {identifierLabel}",
2832
+ "card.header.description.registration": "Registrarse con {identifierLabel}",
2833
+ "misc.or": "o",
2834
+ "forms.label.forgot-password": "\xBFOlvidaste tu contrase\xF1a?",
2835
+ "settings.oidc.info": "Las cuentas conectadas de estos proveedores se pueden utilizar para iniciar sesi\xF3n en tu cuenta",
2836
+ "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",
2837
+ "settings.passkey.info": "Administra la configuraci\xF3n de tus claves de acceso",
2838
+ "card.footer.select-another-method": "Seleccionar otro m\xE9todo",
2839
+ "account-linking.title": "Vincular cuenta",
2840
+ "property.password": "contrase\xF1a",
2841
+ "property.email": "correo electr\xF3nico",
2842
+ "property.phone": "tel\xE9fono",
2843
+ "property.username": "nombre de usuario",
2844
+ "property.identifier": "identificador",
2845
+ "property.code": "c\xF3digo",
2846
+ "error.title.what-happened": "\xBFQu\xE9 pas\xF3?",
2847
+ "error.title.what-can-i-do": "\xBFQu\xE9 puedo hacer?",
2848
+ "error.instructions": "Por favor, int\xE9ntalo de nuevo en unos minutos o contacta al operador del sitio web.",
2849
+ "error.footer.text": "Al informar este error, incluye la siguiente informaci\xF3n:",
2850
+ "error.footer.copy": "Copiar",
2851
+ "error.action.go-back": "Regresar",
2852
+ "identities.messages.1010020": "",
2853
+ "identities.messages.1050020": 'Eliminar passkey "{display_name}"'
2582
2854
  };
2583
2855
 
2584
2856
  // src/locales/fr.json
@@ -2769,87 +3041,103 @@ var fr_default = {
2769
3041
  "two-step.totp.description": "Utilisez un code \xE0 usage unique \xE0 6 chiffres provenant de votre application d'authentification",
2770
3042
  "two-step.lookup_secret.title": "Code de r\xE9cup\xE9ration de secours",
2771
3043
  "two-step.lookup_secret.description": "Utilisez l'un de vos codes de secours \xE0 8 chiffres pour vous authentifier",
2772
- "identities.messages.1010023": "",
2773
- "identities.messages.1070015": "",
2774
- "identities.messages.4000038": "",
2775
- "login.cancel-button": "",
2776
- "login.cancel-label": "",
2777
- "identities.messages.1010016": "",
2778
- "identities.messages.1010017": "",
2779
- "identities.messages.1010018": "",
2780
- "identities.messages.1010019": "",
2781
- "identities.messages.1010020": "",
2782
- "identities.messages.1010021": "",
2783
- "identities.messages.1010022": "",
2784
- "identities.messages.1040007": "",
2785
- "identities.messages.1040008": "",
2786
- "identities.messages.1040009": "",
2787
- "identities.messages.1050019": "",
2788
- "identities.messages.1050020": "",
2789
- "identities.messages.1070014": "",
2790
- "identities.messages.4000037": "",
2791
- "identities.messages.4010009": "",
2792
- "identities.messages.4010010": "",
2793
- "input.placeholder": "",
2794
- "card.header.description.login": "",
2795
- "card.header.description.registration": "",
2796
- "card.header.parts.code": "",
2797
- "card.header.parts.identifier-first": "",
2798
- "card.header.parts.oidc": "",
2799
- "card.header.parts.passkey": "",
2800
- "card.header.parts.password.login": "",
2801
- "card.header.parts.password.registration": "",
2802
- "card.header.parts.webauthn": "",
2803
- "forms.label.forgot-password": "",
2804
- "login.subtitle": "",
2805
- "login.subtitle-refresh": "",
2806
- "misc.or": "",
2807
- "recovery.subtitle": "",
2808
- "registration.subtitle": "",
2809
- "settings.subtitle": "",
2810
- "verification.subtitle": "",
2811
3044
  "settings.totp.info.linked": "Vous avez actuellement une application d'authentification connect\xE9e.",
2812
3045
  "settings.totp.info.not-linked": "Pour activer, scannez le QR code avec votre authentificateur et entrez le code.",
2813
3046
  "settings.totp.title": "Application d'authentification",
2814
3047
  "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.",
2815
- "settings.lookup_secret.description": "",
2816
- "settings.lookup_secret.title": "",
2817
- "settings.navigation.title": "",
2818
- "settings.oidc.description": "",
2819
- "settings.oidc.info": "",
2820
- "settings.oidc.title": "",
2821
- "settings.passkey.description": "",
2822
- "settings.passkey.info": "",
2823
- "settings.passkey.title": "",
2824
- "settings.password.description": "",
2825
- "settings.password.title": "",
2826
- "settings.profile.description": "",
2827
- "settings.profile.title": "",
2828
- "settings.title-lookup-secret": "",
2829
- "settings.title-navigation": "",
2830
- "settings.title-oidc": "",
2831
- "settings.title-passkey": "",
2832
- "settings.title-password": "",
2833
- "settings.title-profile": "",
2834
- "settings.title-totp": "",
2835
- "settings.title-webauthn": "",
2836
- "settings.webauthn.description": "",
2837
- "settings.webauthn.info": "",
2838
- "settings.webauthn.title": "",
2839
- "card.footer.select-another-method": "",
2840
- "account-linking.title": "",
2841
- "property.code": "",
2842
- "property.email": "",
2843
- "property.identifier": "",
2844
- "property.password": "",
2845
- "property.phone": "",
2846
- "property.username": "",
2847
- "error.action.go-back": "",
2848
- "error.footer.copy": "",
2849
- "error.footer.text": "",
2850
- "error.title.what-can-i-do": "",
2851
- "error.title.what-happened": "",
2852
- "error.instructions": ""
3048
+ "consent.title": "Autoriser {party}",
3049
+ "consent.subtitle": "Une application tierce souhaite acc\xE9der aux informations associ\xE9es \xE0 votre compte {identifier}.",
3050
+ "consent.scope.openid.title": "Identit\xE9",
3051
+ "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.",
3052
+ "consent.scope.offline_access.title": "Acc\xE8s hors ligne",
3053
+ "consent.scope.offline_access.description": "Permet \xE0 cette application de vous maintenir connect\xE9 m\xEAme lorsque vous ne l'utilisez pas activement.",
3054
+ "consent.scope.profile.title": "Informations de profil",
3055
+ "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.",
3056
+ "consent.scope.email.title": "Adresse e-mail",
3057
+ "consent.scope.email.description": "R\xE9cup\xE8re votre adresse e-mail et son statut de v\xE9rification.",
3058
+ "consent.scope.address.title": "Adresse physique",
3059
+ "consent.scope.address.description": "Acc\xE8de \xE0 votre adresse postale.",
3060
+ "consent.scope.phone.title": "Num\xE9ro de t\xE9l\xE9phone",
3061
+ "consent.scope.phone.description": "R\xE9cup\xE8re votre num\xE9ro de t\xE9l\xE9phone et son statut de v\xE9rification.",
3062
+ "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.",
3063
+ "identities.messages.1010017": "Se connecter et lier",
3064
+ "identities.messages.1010018": "Confirmer avec {provider}",
3065
+ "identities.messages.1010019": "Demander un code pour continuer",
3066
+ "identities.messages.1010021": "Se connecter avec une cl\xE9 d'acc\xE8s",
3067
+ "identities.messages.1010022": "Se connecter avec un mot de passe",
3068
+ "identities.messages.1010023": "Envoyer le code \xE0 {address}",
3069
+ "identities.messages.1040007": "S'inscrire avec une cl\xE9 d'acc\xE8s",
3070
+ "identities.messages.1040008": "Retour",
3071
+ "identities.messages.1040009": "Veuillez choisir une identification pour vous authentifier.",
3072
+ "identities.messages.1050019": "Ajouter une cl\xE9 d'acc\xE8s",
3073
+ "identities.messages.1050020": "Supprimer la cl\xE9 d'acc\xE8s \xAB {display_name} \xBB",
3074
+ "identities.messages.1070014": "Se connecter et lier l'identification",
3075
+ "identities.messages.1070015": "Veuillez compl\xE9ter le d\xE9fi captcha pour continuer.",
3076
+ "identities.messages.4000037": "Ce compte n'existe pas ou n'a aucune m\xE9thode de connexion configur\xE9e.",
3077
+ "identities.messages.4000038": "La v\xE9rification Captcha a \xE9chou\xE9, veuillez r\xE9essayer.",
3078
+ "identities.messages.4010009": "Les identifications li\xE9es ne correspondent pas.",
3079
+ "identities.messages.4010010": "L'adresse que vous avez saisie ne correspond \xE0 aucune adresse connue dans le compte actuel.",
3080
+ "login.cancel-button": "Annuler",
3081
+ "login.cancel-label": "Ce n'est pas le bon compte\xA0?",
3082
+ "login.subtitle": "Se connecter avec {parts}",
3083
+ "login.subtitle-refresh": "Confirmez votre identit\xE9 avec {parts}",
3084
+ "recovery.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour recevoir un code d'acc\xE8s unique",
3085
+ "registration.subtitle": "S'inscrire avec {parts}",
3086
+ "settings.subtitle": "Mettre \xE0 jour les param\xE8tres de votre compte",
3087
+ "settings.title-lookup-secret": "G\xE9rer les codes de r\xE9cup\xE9ration de sauvegarde 2FA",
3088
+ "settings.title-navigation": "Param\xE8tres du compte",
3089
+ "settings.title-oidc": "Connexion via les r\xE9seaux sociaux",
3090
+ "settings.title-password": "Changer le mot de passe",
3091
+ "settings.title-profile": "Param\xE8tres du profil",
3092
+ "settings.title-totp": "G\xE9rer l'application d'authentification 2FA TOTP",
3093
+ "settings.title-webauthn": "G\xE9rer les jetons mat\xE9riels",
3094
+ "settings.title-passkey": "G\xE9rer les cl\xE9s d'acc\xE8s",
3095
+ "settings.navigation.title": "Param\xE8tres du compte",
3096
+ "settings.password.title": "Changer le mot de passe",
3097
+ "settings.password.description": "Modifier votre mot de passe",
3098
+ "settings.profile.title": "Param\xE8tres du profil",
3099
+ "settings.profile.description": "Mettre \xE0 jour les informations de votre profil",
3100
+ "settings.webauthn.title": "G\xE9rer les jetons mat\xE9riels",
3101
+ "settings.webauthn.description": "G\xE9rer les param\xE8tres de votre jeton mat\xE9riel",
3102
+ "verification.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour la v\xE9rifier",
3103
+ "input.placeholder": "Saisissez votre {placeholder}",
3104
+ "card.header.parts.oidc": "un fournisseur de r\xE9seaux sociaux",
3105
+ "card.header.parts.password.registration": "votre {identifierLabel} et un mot de passe",
3106
+ "card.header.parts.password.login": "votre {identifierLabel} et votre mot de passe",
3107
+ "card.header.parts.passkey": "une cl\xE9 d'acc\xE8s",
3108
+ "card.header.parts.webauthn": "une cl\xE9 de s\xE9curit\xE9",
3109
+ "card.header.parts.identifier-first": "votre {identifierLabel}",
3110
+ "card.header.parts.code": "un code qui vous a \xE9t\xE9 envoy\xE9",
3111
+ "card.header.parts.totp": "votre application d'authentification",
3112
+ "card.header.parts.lookup_secret": "un code de r\xE9cup\xE9ration de secours",
3113
+ "card.header.description.login": "Se connecter avec {identifierLabel}",
3114
+ "card.header.description.registration": "S'inscrire avec {identifierLabel}",
3115
+ "misc.or": "ou",
3116
+ "forms.label.forgot-password": "Mot de passe oubli\xE9?",
3117
+ "settings.lookup_secret.title": "Codes de r\xE9cup\xE9ration de sauvegarde (second facteur)",
3118
+ "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.",
3119
+ "settings.oidc.title": "Comptes connect\xE9s",
3120
+ "settings.oidc.description": "Connectez un fournisseur de connexion sociale \xE0 votre compte.",
3121
+ "settings.oidc.info": "Les comptes connect\xE9s de ces fournisseurs peuvent \xEAtre utilis\xE9s pour vous connecter \xE0 votre compte",
3122
+ "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",
3123
+ "settings.passkey.title": "G\xE9rer les cl\xE9s d'acc\xE8s",
3124
+ "settings.passkey.description": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3125
+ "settings.passkey.info": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3126
+ "card.footer.select-another-method": "S\xE9lectionner une autre m\xE9thode",
3127
+ "account-linking.title": "Lier le compte",
3128
+ "property.password": "mot de passe",
3129
+ "property.email": "e-mail",
3130
+ "property.phone": "t\xE9l\xE9phone",
3131
+ "property.username": "nom d'utilisateur",
3132
+ "property.identifier": "identifiant",
3133
+ "property.code": "code",
3134
+ "error.title.what-happened": "Que s'est-il pass\xE9?",
3135
+ "error.title.what-can-i-do": "Que puis-je faire?",
3136
+ "error.instructions": "Veuillez r\xE9essayer dans quelques minutes ou contacter l'op\xE9rateur du site Web.",
3137
+ "error.footer.text": "Lorsque vous signalez cette erreur, veuillez inclure les informations suivantes:",
3138
+ "error.footer.copy": "Copier",
3139
+ "error.action.go-back": "Retour",
3140
+ "identities.messages.1010020": ""
2853
3141
  };
2854
3142
 
2855
3143
  // src/locales/nl.json
@@ -3064,7 +3352,9 @@ var nl_default = {
3064
3352
  "input.placeholder": "",
3065
3353
  "card.header.description.login": "",
3066
3354
  "card.header.description.registration": "",
3067
- "card.header.parts.code": "",
3355
+ "card.header.parts.code": "een code die naar je is verzonden",
3356
+ "card.header.parts.totp": "je authenticator-app",
3357
+ "card.header.parts.lookup_secret": "een backup herstelcode",
3068
3358
  "card.header.parts.identifier-first": "",
3069
3359
  "card.header.parts.oidc": "",
3070
3360
  "card.header.parts.passkey": "",
@@ -3115,6 +3405,20 @@ var nl_default = {
3115
3405
  "property.password": "",
3116
3406
  "property.phone": "",
3117
3407
  "property.username": "",
3408
+ "consent.title": "Autoriseren {party}",
3409
+ "consent.subtitle": "Een derde partij applicatie wil toegang tot informatie die aan uw account {identifier} is gekoppeld.",
3410
+ "consent.scope.openid.title": "Identiteit",
3411
+ "consent.scope.openid.description": "Stelt de applicatie in staat uw identiteit te verifi\xEBren. Dit is vereist voor authenticatie en een betrouwbare inlogervaring.",
3412
+ "consent.scope.offline_access.title": "Offline toegang",
3413
+ "consent.scope.offline_access.description": "Stelt deze applicatie in staat u ingelogd te houden, zelfs wanneer u deze niet actief gebruikt.",
3414
+ "consent.scope.profile.title": "Profielinformatie",
3415
+ "consent.scope.profile.description": "Geeft toegang tot uw basisprofielgegevens, inclusief uw gebruikersnaam, voornaam en achternaam.",
3416
+ "consent.scope.email.title": "E-mailadres",
3417
+ "consent.scope.email.description": "Haal uw e-mailadres en de verificatiestatus ervan op.",
3418
+ "consent.scope.address.title": "Fysiek adres",
3419
+ "consent.scope.address.description": "Toegang tot uw postadres.",
3420
+ "consent.scope.phone.title": "Telefoonnummer",
3421
+ "consent.scope.phone.description": "Haal uw telefoonnummer en de verificatiestatus ervan op.",
3118
3422
  "error.action.go-back": "",
3119
3423
  "error.footer.copy": "",
3120
3424
  "error.footer.text": "",
@@ -3335,13 +3639,15 @@ var pl_default = {
3335
3639
  "input.placeholder": "",
3336
3640
  "card.header.description.login": "",
3337
3641
  "card.header.description.registration": "",
3338
- "card.header.parts.code": "",
3339
3642
  "card.header.parts.identifier-first": "",
3340
3643
  "card.header.parts.oidc": "",
3341
3644
  "card.header.parts.passkey": "",
3342
3645
  "card.header.parts.password.login": "",
3343
3646
  "card.header.parts.password.registration": "",
3344
3647
  "card.header.parts.webauthn": "",
3648
+ "card.header.parts.code": "kod wys\u0142any do Ciebie",
3649
+ "card.header.parts.totp": "Twoja aplikacja uwierzytelniaj\u0105ca",
3650
+ "card.header.parts.lookup_secret": "kod odzyskiwania kopii zapasowej",
3345
3651
  "forms.label.forgot-password": "",
3346
3652
  "login.subtitle": "",
3347
3653
  "login.subtitle-refresh": "",
@@ -3386,6 +3692,20 @@ var pl_default = {
3386
3692
  "property.phone": "",
3387
3693
  "property.username": "",
3388
3694
  "property.identifier": "",
3695
+ "consent.title": "Autoryzuj {party}",
3696
+ "consent.subtitle": "Aplikacja trzeciej strony chce uzyska\u0107 dost\u0119p do informacji powi\u0105zanych z Twoim kontem {identifier}.",
3697
+ "consent.scope.openid.title": "To\u017Csamo\u015B\u0107",
3698
+ "consent.scope.openid.description": "Pozwala aplikacji zweryfikowa\u0107 Twoj\u0105 to\u017Csamo\u015B\u0107. Jest to wymagane do uwierzytelniania i zapewnienia zaufanej sesji logowania.",
3699
+ "consent.scope.offline_access.title": "Dost\u0119p offline",
3700
+ "consent.scope.offline_access.description": "Pozwala aplikacji utrzyma\u0107 Twoje logowanie, nawet gdy nie korzystasz z niej aktywnie.",
3701
+ "consent.scope.profile.title": "Informacje profilowe",
3702
+ "consent.scope.profile.description": "Pozwala na dost\u0119p do podstawowych danych profilowych, w tym nazwy u\u017Cytkownika, imienia i nazwiska.",
3703
+ "consent.scope.email.title": "Adres e-mail",
3704
+ "consent.scope.email.description": "Pobierz sw\xF3j adres e-mail oraz status jego weryfikacji.",
3705
+ "consent.scope.address.title": "Adres fizyczny",
3706
+ "consent.scope.address.description": "Dost\u0119p do Twojego adresu pocztowego.",
3707
+ "consent.scope.phone.title": "Numer telefonu",
3708
+ "consent.scope.phone.description": "Pobierz sw\xF3j numer telefonu oraz status jego weryfikacji.",
3389
3709
  "error.action.go-back": "",
3390
3710
  "error.footer.copy": "",
3391
3711
  "error.footer.text": "",
@@ -3606,7 +3926,9 @@ var pt_default = {
3606
3926
  "input.placeholder": "",
3607
3927
  "card.header.description.login": "",
3608
3928
  "card.header.description.registration": "",
3609
- "card.header.parts.code": "",
3929
+ "card.header.parts.code": "um c\xF3digo enviado para voc\xEA",
3930
+ "card.header.parts.totp": "seu aplicativo autenticador",
3931
+ "card.header.parts.lookup_secret": "um c\xF3digo de recupera\xE7\xE3o de backup",
3610
3932
  "card.header.parts.identifier-first": "",
3611
3933
  "card.header.parts.oidc": "",
3612
3934
  "card.header.parts.passkey": "",
@@ -3657,6 +3979,20 @@ var pt_default = {
3657
3979
  "property.password": "",
3658
3980
  "property.phone": "",
3659
3981
  "property.username": "",
3982
+ "consent.title": "Autorizar {party}",
3983
+ "consent.subtitle": "Um aplicativo de terceiros deseja acessar as informa\xE7\xF5es associadas \xE0 sua conta {identifier}.",
3984
+ "consent.scope.openid.title": "Identidade",
3985
+ "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.",
3986
+ "consent.scope.offline_access.title": "Acesso Offline",
3987
+ "consent.scope.offline_access.description": "Permite que este aplicativo mantenha voc\xEA conectado mesmo quando n\xE3o estiver usando-o ativamente.",
3988
+ "consent.scope.profile.title": "Informa\xE7\xF5es do Perfil",
3989
+ "consent.scope.profile.description": "Permite o acesso aos detalhes b\xE1sicos do seu perfil, incluindo seu nome de usu\xE1rio, primeiro nome e sobrenome.",
3990
+ "consent.scope.email.title": "Endere\xE7o de E-mail",
3991
+ "consent.scope.email.description": "Recupere seu endere\xE7o de e-mail e seu status de verifica\xE7\xE3o.",
3992
+ "consent.scope.address.title": "Endere\xE7o F\xEDsico",
3993
+ "consent.scope.address.description": "Acesse seu endere\xE7o postal.",
3994
+ "consent.scope.phone.title": "N\xFAmero de Telefone",
3995
+ "consent.scope.phone.description": "Recupere seu n\xFAmero de telefone e seu status de verifica\xE7\xE3o.",
3660
3996
  "error.action.go-back": "",
3661
3997
  "error.footer.copy": "",
3662
3998
  "error.footer.text": "",
@@ -3877,7 +4213,9 @@ var sv_default = {
3877
4213
  "input.placeholder": "Ange din {placeholder}",
3878
4214
  "card.header.description.login": "Logga in med {identifierLabel}",
3879
4215
  "card.header.description.registration": "Registrera dig med {identifierLabel}",
3880
- "card.header.parts.code": "en kod skickad till din e-post",
4216
+ "card.header.parts.code": "en kod skickad till dig",
4217
+ "card.header.parts.totp": "din autentiseringsapp",
4218
+ "card.header.parts.lookup_secret": "en s\xE4kerhetskopieringskod",
3881
4219
  "card.header.parts.identifier-first": "din {identifierLabel}",
3882
4220
  "card.header.parts.oidc": "en social leverant\xF6r",
3883
4221
  "card.header.parts.passkey": "en Passkey",
@@ -3928,6 +4266,20 @@ var sv_default = {
3928
4266
  "property.username": "anv\xE4ndarnamn",
3929
4267
  "property.identifier": "identifier",
3930
4268
  "property.code": "kod",
4269
+ "consent.title": "Auktorisera {party}",
4270
+ "consent.subtitle": "En tredjepartsapplikation vill f\xE5 tillg\xE5ng till information kopplad till ditt konto {identifier}.",
4271
+ "consent.scope.openid.title": "Identitet",
4272
+ "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.",
4273
+ "consent.scope.offline_access.title": "Offline-\xE5tkomst",
4274
+ "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.",
4275
+ "consent.scope.profile.title": "Profilinformation",
4276
+ "consent.scope.profile.description": "Ger tillg\xE5ng till dina grundl\xE4ggande profiluppgifter, inklusive ditt anv\xE4ndarnamn, f\xF6rnamn och efternamn.",
4277
+ "consent.scope.email.title": "E-postadress",
4278
+ "consent.scope.email.description": "H\xE4mta din e-postadress och dess verifieringsstatus.",
4279
+ "consent.scope.address.title": "Fysisk adress",
4280
+ "consent.scope.address.description": "F\xE5 \xE5tkomst till din postadress.",
4281
+ "consent.scope.phone.title": "Telefonnummer",
4282
+ "consent.scope.phone.description": "H\xE4mta ditt telefonnummer och dess verifieringsstatus.",
3931
4283
  "error.action.go-back": "",
3932
4284
  "error.footer.copy": "",
3933
4285
  "error.footer.text": "",
@@ -3954,6 +4306,7 @@ exports.OryCardContent = OryCardContent;
3954
4306
  exports.OryCardFooter = OryCardFooter;
3955
4307
  exports.OryCardHeader = OryCardHeader;
3956
4308
  exports.OryCardValidationMessages = OryCardValidationMessages;
4309
+ exports.OryConsentCard = OryConsentCard;
3957
4310
  exports.OryForm = OryForm;
3958
4311
  exports.OryFormGroupDivider = OryFormGroupDivider;
3959
4312
  exports.OryFormGroups = OryFormGroups;