@ory/elements-react 0.0.0-pr.6b3fe62 → 0.0.0-pr.6ecad3e0

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
@@ -50,13 +50,18 @@ var defaultNodeOrder = [
50
50
  ];
51
51
  function defaultNodeSorter(a, b) {
52
52
  var _a, _b;
53
+ const aIsCaptcha = a.group === "captcha";
54
+ const bIsCaptcha = b.group === "captcha";
55
+ const aIsSubmit = clientFetch.isUiNodeInputAttributes(a.attributes) && a.attributes.type === "submit";
56
+ const bIsSubmit = clientFetch.isUiNodeInputAttributes(b.attributes) && b.attributes.type === "submit";
57
+ if (aIsCaptcha && bIsSubmit) {
58
+ return -1;
59
+ }
60
+ if (bIsCaptcha && aIsSubmit) {
61
+ return 1;
62
+ }
53
63
  const aGroupWeight = (_a = defaultNodeOrder.indexOf(a.group)) != null ? _a : 999;
54
64
  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
- }
60
65
  return aGroupWeight - bGroupWeight;
61
66
  }
62
67
  var defaultGroupOrder = [
@@ -94,28 +99,10 @@ function OryComponentProvider({
94
99
  }
95
100
  );
96
101
  }
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);
102
+
103
+ // src/theme/default/utils/form.ts
104
+ function isGroupImmediateSubmit(group) {
105
+ return group === "code";
119
106
  }
120
107
  function triggerToWindowCall(trigger) {
121
108
  if (!trigger) {
@@ -192,21 +179,29 @@ function nodesToAuthMethodGroups(nodes, excludeAuthMethods = []) {
192
179
  function useNodesGroups(nodes, { omit } = {}) {
193
180
  const groupSorter = useGroupSorter();
194
181
  const groups = react.useMemo(() => {
195
- var _a;
182
+ var _a, _b;
196
183
  const groups2 = {};
184
+ const groupRetained = {};
197
185
  for (const node of nodes) {
186
+ const groupNodes = (_a = groups2[node.group]) != null ? _a : [];
187
+ groupNodes.push(node);
188
+ groups2[node.group] = groupNodes;
198
189
  if ((omit == null ? void 0 : omit.includes("script")) && clientFetch.isUiNodeScriptAttributes(node.attributes)) {
199
190
  continue;
200
191
  }
201
192
  if ((omit == null ? void 0 : omit.includes("input_hidden")) && clientFetch.isUiNodeInputAttributes(node.attributes) && node.attributes.type === "hidden") {
202
193
  continue;
203
194
  }
204
- const groupNodes = (_a = groups2[node.group]) != null ? _a : [];
205
- groupNodes.push(node);
206
- groups2[node.group] = groupNodes;
195
+ groupRetained[node.group] = ((_b = groupRetained[node.group]) != null ? _b : 0) + 1;
207
196
  }
208
- return groups2;
209
- }, [nodes]);
197
+ const finalGroups = {};
198
+ for (const [group, count] of Object.entries(groupRetained)) {
199
+ if (count > 0) {
200
+ finalGroups[group] = groups2[group];
201
+ }
202
+ }
203
+ return finalGroups;
204
+ }, [nodes, omit]);
210
205
  const entries = react.useMemo(
211
206
  () => Object.entries(groups).sort(([a], [b]) => groupSorter(a, b)),
212
207
  [groups, groupSorter]
@@ -219,6 +214,93 @@ function useNodesGroups(nodes, { omit } = {}) {
219
214
  var findNode = (nodes, opt) => nodes.find((n) => {
220
215
  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);
221
216
  });
217
+ function useFunctionalNodes(nodes) {
218
+ return nodes.filter(
219
+ ({ group }) => [
220
+ clientFetch.UiNodeGroupEnum.Default,
221
+ clientFetch.UiNodeGroupEnum.IdentifierFirst,
222
+ clientFetch.UiNodeGroupEnum.Profile,
223
+ clientFetch.UiNodeGroupEnum.Captcha
224
+ ].includes(group)
225
+ );
226
+ }
227
+ function isUiNodeGroupEnum(method) {
228
+ return Object.values(clientFetch.UiNodeGroupEnum).includes(method);
229
+ }
230
+ function isSingleSignOnNode(node) {
231
+ return node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml;
232
+ }
233
+ function hasSingleSignOnNodes(nodes) {
234
+ return nodes.some(isSingleSignOnNode);
235
+ }
236
+ function withoutSingleSignOnNodes(nodes) {
237
+ return nodes.filter((node) => !isSingleSignOnNode(node));
238
+ }
239
+ function isNodeVisible(node) {
240
+ if (clientFetch.isUiNodeScriptAttributes(node.attributes)) {
241
+ return false;
242
+ } else if (clientFetch.isUiNodeInputAttributes(node.attributes)) {
243
+ if (node.attributes.type === "hidden") {
244
+ return false;
245
+ }
246
+ }
247
+ return true;
248
+ }
249
+ function useNodeGroupsWithVisibleNodes(nodes) {
250
+ return react.useMemo(() => {
251
+ var _a, _b;
252
+ const groups = {};
253
+ const groupRetained = {};
254
+ for (const node of nodes) {
255
+ const groupNodes = (_a = groups[node.group]) != null ? _a : [];
256
+ const groupCount = (_b = groupRetained[node.group]) != null ? _b : 0;
257
+ groupNodes.push(node);
258
+ groups[node.group] = groupNodes;
259
+ if (!isNodeVisible(node)) {
260
+ continue;
261
+ }
262
+ groupRetained[node.group] = groupCount + 1;
263
+ }
264
+ const finalGroups = {};
265
+ for (const [group, count] of Object.entries(groupRetained)) {
266
+ if (count > 0) {
267
+ finalGroups[group] = groups[group];
268
+ }
269
+ }
270
+ return finalGroups;
271
+ }, [nodes]);
272
+ }
273
+
274
+ // src/components/card/two-step/utils.ts
275
+ function isChoosingMethod(flow) {
276
+ return flow.flow.ui.nodes.some(
277
+ (node) => "name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous"
278
+ ) || flow.flow.ui.nodes.some(
279
+ (node) => node.group === clientFetch.UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
280
+ ) || flow.flowType === clientFetch.FlowType.Login && flow.flow.requested_aal === "aal2";
281
+ }
282
+ function getFinalNodes(uniqueGroups, selectedGroup) {
283
+ var _a, _b, _c, _d;
284
+ const selectedNodes = selectedGroup ? (_a = uniqueGroups[selectedGroup]) != null ? _a : [] : [];
285
+ return [
286
+ ...(_b = uniqueGroups == null ? void 0 : uniqueGroups.identifier_first) != null ? _b : [],
287
+ ...(_c = uniqueGroups == null ? void 0 : uniqueGroups.default) != null ? _c : [],
288
+ ...(_d = uniqueGroups == null ? void 0 : uniqueGroups.captcha) != null ? _d : []
289
+ ].flat().filter(
290
+ (node) => "type" in node.attributes && node.attributes.type === "hidden"
291
+ ).concat(selectedNodes);
292
+ }
293
+ var handleAfterFormSubmit = (dispatchFormState) => (method) => {
294
+ if (typeof method !== "string" || !isUiNodeGroupEnum(method)) {
295
+ return;
296
+ }
297
+ if (isGroupImmediateSubmit(method)) {
298
+ dispatchFormState({
299
+ type: "action_select_method",
300
+ method
301
+ });
302
+ }
303
+ };
222
304
 
223
305
  // src/context/form-state.ts
224
306
  function findMethodWithMessage(nodes) {
@@ -484,15 +566,11 @@ function OryCardContent({ children }) {
484
566
  const { Card } = useComponents();
485
567
  return /* @__PURE__ */ jsxRuntime.jsx(Card.Content, { children });
486
568
  }
487
-
488
- // src/theme/default/utils/form.ts
489
- function isGroupImmediateSubmit(group) {
490
- return group === "code";
491
- }
492
569
  function frontendClient(sdkUrl, opts = {}) {
493
570
  const config = new clientFetch.Configuration({
494
571
  ...opts,
495
572
  basePath: sdkUrl,
573
+ credentials: "include",
496
574
  headers: {
497
575
  Accept: "application/json",
498
576
  ...opts.headers
@@ -886,6 +964,9 @@ function OryForm({
886
964
  const onSubmit = useOryFormSubmit(onAfterSubmit);
887
965
  const hasMethods = flowContainer.flow.ui.nodes.some((node) => {
888
966
  if (clientFetch.isUiNodeInputAttributes(node.attributes)) {
967
+ if (node.attributes.type === "hidden") {
968
+ return false;
969
+ }
889
970
  return node.attributes.name !== "csrf_token";
890
971
  } else if (clientFetch.isUiNodeAnchorAttributes(node.attributes)) {
891
972
  return true;
@@ -905,12 +986,9 @@ function OryForm({
905
986
  }),
906
987
  type: "error"
907
988
  };
908
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": dataTestId, children: [
909
- /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: m }, m.id) }),
910
- /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
911
- ] });
989
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": dataTestId, children: /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: m }, m.id) }) });
912
990
  }
913
- if (flowContainer.flowType === clientFetch.FlowType.Login && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
991
+ if ((flowContainer.flowType === clientFetch.FlowType.Login || flowContainer.flowType === clientFetch.FlowType.Registration) && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
914
992
  methods.setValue("method", "code");
915
993
  }
916
994
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -964,10 +1042,7 @@ var NodeInput = ({
964
1042
  const isResendNode = ((_a = node.meta.label) == null ? void 0 : _a.id) === 1070008;
965
1043
  const isScreenSelectionNode = "name" in node.attributes && node.attributes.name === "screen";
966
1044
  const setFormValue = () => {
967
- if (isResendNode || isScreenSelectionNode || node.group === clientFetch.UiNodeGroupEnum.Oauth2Consent) {
968
- return;
969
- }
970
- if (attrs.value !== void 0) {
1045
+ if (attrs.value && !(isResendNode || isScreenSelectionNode || node.group === clientFetch.UiNodeGroupEnum.Oauth2Consent)) {
971
1046
  setValue(attrs.name, attrs.value);
972
1047
  }
973
1048
  };
@@ -1111,7 +1186,7 @@ function OryFormOidcButtons() {
1111
1186
  if (filteredNodes.length === 0) {
1112
1187
  return null;
1113
1188
  }
1114
- return /* @__PURE__ */ jsxRuntime.jsx(Form.OidcRoot, { nodes: filteredNodes, children: filteredNodes.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(
1189
+ return /* @__PURE__ */ jsxRuntime.jsx(Form.OidcRoot, { nodes: filteredNodes, children: filteredNodes.map((node) => /* @__PURE__ */ jsxRuntime.jsx(
1115
1190
  Node2.OidcButton,
1116
1191
  {
1117
1192
  node,
@@ -1124,7 +1199,7 @@ function OryFormOidcButtons() {
1124
1199
  setValue("method", node.group);
1125
1200
  }
1126
1201
  },
1127
- k
1202
+ clientFetch.getNodeId(node)
1128
1203
  )) });
1129
1204
  }
1130
1205
  function OryFormSocialButtonsForm() {
@@ -1139,24 +1214,104 @@ function OryFormSocialButtonsForm() {
1139
1214
  }
1140
1215
  return /* @__PURE__ */ jsxRuntime.jsx(OryFormProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(OryForm, { "data-testid": `ory/form/methods/oidc-saml`, children: /* @__PURE__ */ jsxRuntime.jsx(OryFormOidcButtons, {}) }) });
1141
1216
  }
1142
- function isUINodeGroupEnum(method) {
1143
- return Object.values(clientFetch.UiNodeGroupEnum).includes(method);
1217
+ function OryTwoStepCardStateMethodActive({
1218
+ formState
1219
+ }) {
1220
+ const { Form } = useComponents();
1221
+ const { flow, flowType, dispatchFormState } = useOryFlow();
1222
+ const { ui } = flow;
1223
+ const nodeSorter = useNodeSorter();
1224
+ const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1225
+ const groupsToShow = useNodeGroupsWithVisibleNodes(ui.nodes);
1226
+ const finalNodes = getFinalNodes(groupsToShow, formState.method);
1227
+ const selectedMethodIsSocial = formState.method === clientFetch.UiNodeGroupEnum.Oidc || formState.method === clientFetch.UiNodeGroupEnum.Saml;
1228
+ return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1229
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1230
+ /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1231
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1232
+ selectedMethodIsSocial && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1233
+ /* @__PURE__ */ jsxRuntime.jsx(
1234
+ OryForm,
1235
+ {
1236
+ "data-testid": `ory/form/methods/local`,
1237
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1238
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1239
+ ui.nodes.filter(
1240
+ (n) => clientFetch.isUiNodeScriptAttributes(n.attributes) || n.group === clientFetch.UiNodeGroupEnum.Default || n.group === clientFetch.UiNodeGroupEnum.Profile
1241
+ ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1242
+ finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1243
+ ] })
1244
+ }
1245
+ )
1246
+ ] }),
1247
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1248
+ ] });
1144
1249
  }
1145
- function OryTwoStepCard() {
1146
- var _a, _b, _c, _d;
1250
+ function OryTwoStepCardStateProvideIdentifier() {
1147
1251
  const { Form, Card } = useComponents();
1148
- const { flow, flowType, formState, dispatchFormState } = useOryFlow();
1149
- const { ui } = flow;
1252
+ const { flowType, flow, dispatchFormState } = useOryFlow();
1150
1253
  const nodeSorter = useNodeSorter();
1151
1254
  const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1152
- const groupsToShow = useNodesGroups(ui.nodes, {
1153
- // We only want to render groups that have visible elements.
1154
- omit: ["script", "input_hidden"]
1155
- });
1156
- const authMethodBlocks = Object.fromEntries(
1255
+ const nonSsoNodes = withoutSingleSignOnNodes(flow.ui.nodes).sort(sortNodes);
1256
+ const hasSso = flow.ui.nodes.filter(isNodeVisible).some(
1257
+ (node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
1258
+ );
1259
+ const showSsoDivider = hasSso && nonSsoNodes.some(isNodeVisible);
1260
+ return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1261
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1262
+ /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1263
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1264
+ /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1265
+ /* @__PURE__ */ jsxRuntime.jsx(
1266
+ OryForm,
1267
+ {
1268
+ "data-testid": `ory/form/methods/local`,
1269
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1270
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1271
+ showSsoDivider && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1272
+ nonSsoNodes.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1273
+ ] })
1274
+ }
1275
+ )
1276
+ ] }),
1277
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1278
+ ] });
1279
+ }
1280
+ function AuthMethodList({
1281
+ options,
1282
+ setSelectedGroup
1283
+ }) {
1284
+ const { Card } = useComponents();
1285
+ const { setValue, getValues } = reactHookForm.useFormContext();
1286
+ if (Object.entries(options).length === 0) {
1287
+ return null;
1288
+ }
1289
+ const handleClick = (group, options2) => {
1290
+ var _a, _b, _c, _d;
1291
+ if (isGroupImmediateSubmit(group)) {
1292
+ if (group === "code" && !getValues("identifier") && ((_b = (_a = options2 == null ? void 0 : options2.title) == null ? void 0 : _a.values) == null ? void 0 : _b.address)) {
1293
+ setValue("identifier", (_d = (_c = options2 == null ? void 0 : options2.title) == null ? void 0 : _c.values) == null ? void 0 : _d.address);
1294
+ }
1295
+ setValue("method", group);
1296
+ } else {
1297
+ setSelectedGroup(group);
1298
+ }
1299
+ };
1300
+ return /* @__PURE__ */ jsxRuntime.jsx(Card.AuthMethodListContainer, { children: Object.entries(options).map(([group, options2]) => /* @__PURE__ */ jsxRuntime.jsx(
1301
+ Card.AuthMethodListItem,
1302
+ {
1303
+ group,
1304
+ title: options2.title,
1305
+ onClick: () => handleClick(group, options2)
1306
+ },
1307
+ group
1308
+ )) });
1309
+ }
1310
+ function toAuthMethodPickerOptions(visibleGroups) {
1311
+ return Object.fromEntries(
1157
1312
  Object.values(clientFetch.UiNodeGroupEnum).filter((group) => {
1158
- var _a2;
1159
- return (_a2 = groupsToShow.groups[group]) == null ? void 0 : _a2.length;
1313
+ var _a;
1314
+ return (_a = visibleGroups[group]) == null ? void 0 : _a.length;
1160
1315
  }).filter(
1161
1316
  (group) => ![
1162
1317
  clientFetch.UiNodeGroupEnum.Oidc,
@@ -1168,16 +1323,18 @@ function OryTwoStepCard() {
1168
1323
  ].includes(group)
1169
1324
  ).map((g) => [g, {}])
1170
1325
  );
1171
- const authMethodAdditionalNodes = ui.nodes.filter(
1172
- ({ group }) => [
1173
- clientFetch.UiNodeGroupEnum.Oidc,
1174
- clientFetch.UiNodeGroupEnum.Saml,
1175
- clientFetch.UiNodeGroupEnum.Default,
1176
- clientFetch.UiNodeGroupEnum.IdentifierFirst,
1177
- clientFetch.UiNodeGroupEnum.Profile,
1178
- clientFetch.UiNodeGroupEnum.Captcha
1179
- ].includes(group)
1180
- );
1326
+ }
1327
+ function OryTwoStepCardStateSelectMethod() {
1328
+ var _a, _b, _c, _d;
1329
+ const { Form, Card, Message } = useComponents();
1330
+ const { flow, flowType, dispatchFormState } = useOryFlow();
1331
+ const { ui } = flow;
1332
+ const intl = reactIntl.useIntl();
1333
+ const nodeSorter = useNodeSorter();
1334
+ const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1335
+ const visibleGroups = useNodeGroupsWithVisibleNodes(ui.nodes);
1336
+ const authMethodBlocks = toAuthMethodPickerOptions(visibleGroups);
1337
+ const authMethodAdditionalNodes = useFunctionalNodes(ui.nodes);
1181
1338
  if (clientFetch.UiNodeGroupEnum.Code in authMethodBlocks) {
1182
1339
  let identifier = (_b = (_a = findNode(ui.nodes, {
1183
1340
  group: "identifier_first",
@@ -1198,99 +1355,58 @@ function OryTwoStepCard() {
1198
1355
  };
1199
1356
  }
1200
1357
  }
1201
- const nonSsoNodes = removeSsoNodes(ui.nodes);
1202
- const finalNodes = formState.current === "method_active" ? getFinalNodes(groupsToShow.groups, formState.method) : [];
1203
- const handleAfterFormSubmit = (method) => {
1204
- if (typeof method !== "string" || !isUINodeGroupEnum(method)) {
1205
- return;
1206
- }
1207
- if (isGroupImmediateSubmit(method)) {
1208
- dispatchFormState({
1209
- type: "action_select_method",
1210
- method
1211
- });
1212
- }
1358
+ const noMethods = {
1359
+ id: 5000002,
1360
+ text: intl.formatMessage({
1361
+ id: `identities.messages.5000002`,
1362
+ defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
1363
+ }),
1364
+ type: "error"
1213
1365
  };
1214
- const hasSso = ui.nodes.some(
1215
- (node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
1216
- );
1217
- const showSso = !(formState.current === "method_active" && !(formState.method === clientFetch.UiNodeGroupEnum.Oidc || formState.method === clientFetch.UiNodeGroupEnum.Saml));
1218
- const showSsoDivider = hasSso && nonSsoNodes.filter((n) => {
1219
- if (clientFetch.isUiNodeInputAttributes(n.attributes)) {
1220
- return n.attributes.type !== clientFetch.UiNodeInputAttributesTypeEnum.Hidden;
1221
- } else if (clientFetch.isUiNodeScriptAttributes(n.attributes)) {
1222
- return false;
1223
- }
1224
- return true;
1225
- }).length > 0;
1226
1366
  return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1227
1367
  /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1228
1368
  /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1229
1369
  /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1230
- showSso && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1231
- /* @__PURE__ */ jsxRuntime.jsxs(
1370
+ /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1371
+ Object.entries(authMethodBlocks).length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
1232
1372
  OryForm,
1233
1373
  {
1234
1374
  "data-testid": `ory/form/methods/local`,
1235
- onAfterSubmit: handleAfterFormSubmit,
1236
- children: [
1237
- formState.current === "provide_identifier" && /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1238
- showSsoDivider && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1239
- nonSsoNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1240
- ] }),
1241
- formState.current === "select_method" && /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1242
- Object.entries(authMethodBlocks).length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1243
- Object.entries(authMethodBlocks).length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
1244
- AuthMethodList,
1245
- {
1246
- options: authMethodBlocks,
1247
- setSelectedGroup: (group) => dispatchFormState({
1248
- type: "action_select_method",
1249
- method: group
1250
- })
1251
- }
1252
- ),
1253
- authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1254
- ] }),
1255
- formState.current === "method_active" && /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1256
- ui.nodes.filter(
1257
- (n) => clientFetch.isUiNodeScriptAttributes(n.attributes) || n.group === clientFetch.UiNodeGroupEnum.Captcha
1258
- ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1259
- finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1260
- ] }),
1261
- /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1262
- ]
1375
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1376
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1377
+ /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1378
+ /* @__PURE__ */ jsxRuntime.jsx(
1379
+ AuthMethodList,
1380
+ {
1381
+ options: authMethodBlocks,
1382
+ setSelectedGroup: (group) => dispatchFormState({
1383
+ type: "action_select_method",
1384
+ method: group
1385
+ })
1386
+ }
1387
+ ),
1388
+ authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1389
+ ] })
1263
1390
  }
1264
- )
1265
- ] })
1391
+ ) : !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) }) })
1392
+ ] }),
1393
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1266
1394
  ] });
1267
1395
  }
1268
- function AuthMethodList({ options, setSelectedGroup }) {
1269
- const { Card } = useComponents();
1270
- const { setValue, getValues } = reactHookForm.useFormContext();
1271
- if (Object.entries(options).length === 0) {
1272
- return null;
1396
+ function OryTwoStepCard() {
1397
+ const { formState } = useOryFlow();
1398
+ switch (formState.current) {
1399
+ case "provide_identifier":
1400
+ return /* @__PURE__ */ jsxRuntime.jsx(OryTwoStepCardStateProvideIdentifier, {});
1401
+ case "select_method":
1402
+ return /* @__PURE__ */ jsxRuntime.jsx(OryTwoStepCardStateSelectMethod, {});
1403
+ case "method_active":
1404
+ return /* @__PURE__ */ jsxRuntime.jsx(OryTwoStepCardStateMethodActive, { formState });
1273
1405
  }
1274
- const handleClick = (group, options2) => {
1275
- var _a, _b, _c, _d;
1276
- if (isGroupImmediateSubmit(group)) {
1277
- if (group === "code" && !getValues("identifier") && ((_b = (_a = options2 == null ? void 0 : options2.title) == null ? void 0 : _a.values) == null ? void 0 : _b.address)) {
1278
- setValue("identifier", (_d = (_c = options2 == null ? void 0 : options2.title) == null ? void 0 : _c.values) == null ? void 0 : _d.address);
1279
- }
1280
- setValue("method", group);
1281
- } else {
1282
- setSelectedGroup(group);
1283
- }
1284
- };
1285
- return /* @__PURE__ */ jsxRuntime.jsx(Card.AuthMethodListContainer, { children: Object.entries(options).map(([group, options2]) => /* @__PURE__ */ jsxRuntime.jsx(
1286
- Card.AuthMethodListItem,
1287
- {
1288
- group,
1289
- title: options2.title,
1290
- onClick: () => handleClick(group, options2)
1291
- },
1292
- group
1293
- )) });
1406
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1407
+ "unknown form state: ",
1408
+ formState.current
1409
+ ] });
1294
1410
  }
1295
1411
  function OryFormGroups({ groups }) {
1296
1412
  const {
@@ -1300,8 +1416,8 @@ function OryFormGroups({ groups }) {
1300
1416
  const { flowType } = useOryFlow();
1301
1417
  const { Form } = useComponents();
1302
1418
  const nodes = ui.nodes.filter((node) => groups.indexOf(node.group) > -1).sort((a, b) => nodeSorter(a, b, { flowType }));
1303
- return /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: nodes.map((node, k) => {
1304
- return /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k);
1419
+ return /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: nodes.map((node) => {
1420
+ return /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node));
1305
1421
  }) });
1306
1422
  }
1307
1423
  function OryFormSection({
@@ -1337,7 +1453,7 @@ function OryConsentCard() {
1337
1453
  /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1338
1454
  /* @__PURE__ */ jsxRuntime.jsx(OryCardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(OryForm, { children: [
1339
1455
  /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1340
- /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: flow.flow.ui.nodes.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)) }),
1456
+ /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: flow.flow.ui.nodes.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node))) }),
1341
1457
  /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1342
1458
  /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1343
1459
  ] }) })
@@ -1708,7 +1824,7 @@ function SettingsSectionContent({ group, nodes }) {
1708
1824
  "data-testid": "ory/screen/settings/group/totp",
1709
1825
  children: [
1710
1826
  /* @__PURE__ */ jsxRuntime.jsx(OrySettingsTotp, { nodes: (_a = groupedNodes.groups.totp) != null ? _a : [] }),
1711
- (_b = groupedNodes.groups.default) == null ? void 0 : _b.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1827
+ (_b = groupedNodes.groups.default) == null ? void 0 : _b.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1712
1828
  ]
1713
1829
  }
1714
1830
  );
@@ -1726,7 +1842,7 @@ function SettingsSectionContent({ group, nodes }) {
1726
1842
  nodes: (_c = groupedNodes.groups.lookup_secret) != null ? _c : []
1727
1843
  }
1728
1844
  ),
1729
- (_d = groupedNodes.groups.default) == null ? void 0 : _d.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1845
+ (_d = groupedNodes.groups.default) == null ? void 0 : _d.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1730
1846
  ]
1731
1847
  }
1732
1848
  );
@@ -1739,7 +1855,7 @@ function SettingsSectionContent({ group, nodes }) {
1739
1855
  "data-testid": "ory/screen/settings/group/oidc",
1740
1856
  children: [
1741
1857
  /* @__PURE__ */ jsxRuntime.jsx(OrySettingsOidc, { nodes: (_e = groupedNodes.groups.oidc) != null ? _e : [] }),
1742
- (_f = groupedNodes.groups.default) == null ? void 0 : _f.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1858
+ (_f = groupedNodes.groups.default) == null ? void 0 : _f.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1743
1859
  ]
1744
1860
  }
1745
1861
  );
@@ -1752,7 +1868,7 @@ function SettingsSectionContent({ group, nodes }) {
1752
1868
  "data-testid": "ory/screen/settings/group/webauthn",
1753
1869
  children: [
1754
1870
  /* @__PURE__ */ jsxRuntime.jsx(OrySettingsWebauthn, { nodes: (_g = groupedNodes.groups.webauthn) != null ? _g : [] }),
1755
- (_h = groupedNodes.groups.default) == null ? void 0 : _h.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1871
+ (_h = groupedNodes.groups.default) == null ? void 0 : _h.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1756
1872
  ]
1757
1873
  }
1758
1874
  );
@@ -1765,7 +1881,7 @@ function SettingsSectionContent({ group, nodes }) {
1765
1881
  "data-testid": "ory/screen/settings/group/passkey",
1766
1882
  children: [
1767
1883
  /* @__PURE__ */ jsxRuntime.jsx(OrySettingsPasskey, { nodes: (_i = groupedNodes.groups.passkey) != null ? _i : [] }),
1768
- (_j = groupedNodes.groups.default) == null ? void 0 : _j.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1884
+ (_j = groupedNodes.groups.default) == null ? void 0 : _j.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1769
1885
  ]
1770
1886
  }
1771
1887
  );
@@ -1786,16 +1902,16 @@ function SettingsSectionContent({ group, nodes }) {
1786
1902
  id: `settings.${group}.description`
1787
1903
  }),
1788
1904
  children: [
1789
- (_k = groupedNodes.groups.default) == null ? void 0 : _k.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1905
+ (_k = groupedNodes.groups.default) == null ? void 0 : _k.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node))),
1790
1906
  nodes.filter(
1791
1907
  (node) => "type" in node.attributes && node.attributes.type !== "submit"
1792
- ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1908
+ ).map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
1793
1909
  ]
1794
1910
  }
1795
1911
  ),
1796
1912
  /* @__PURE__ */ jsxRuntime.jsx(Card.SettingsSectionFooter, { children: nodes.filter(
1797
1913
  (node) => "type" in node.attributes && node.attributes.type === "submit"
1798
- ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)) })
1914
+ ).map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node))) })
1799
1915
  ]
1800
1916
  }
1801
1917
  );
@@ -1809,7 +1925,7 @@ function OrySettingsCard() {
1809
1925
  const scriptNodes = onlyScriptNodes(flow.ui.nodes);
1810
1926
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1811
1927
  /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1812
- scriptNodes.map((n) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node: n })),
1928
+ scriptNodes.map((n) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node: n }, clientFetch.getNodeId(n))),
1813
1929
  uniqueGroups.entries.map(([group, nodes]) => {
1814
1930
  if (group === clientFetch.UiNodeGroupEnum.Default) {
1815
1931
  return null;
@@ -2116,9 +2232,11 @@ var en_default = {
2116
2232
  "card.header.parts.oidc": "a social provider",
2117
2233
  "card.header.parts.password.registration": "your {identifierLabel} and a password",
2118
2234
  "card.header.parts.password.login": "your {identifierLabel} and password",
2119
- "card.header.parts.code": "a code sent to your email",
2235
+ "card.header.parts.code": "a code sent to you",
2120
2236
  "card.header.parts.passkey": "a Passkey",
2121
2237
  "card.header.parts.webauthn": "a security key",
2238
+ "card.header.parts.totp": "your authenticator app",
2239
+ "card.header.parts.lookup_secret": "a backup recovery code",
2122
2240
  "card.header.parts.identifier-first": "your {identifierLabel}",
2123
2241
  "card.header.description.login": "Sign in with {identifierLabel}",
2124
2242
  "card.header.description.registration": "Sign up with {identifierLabel}",
@@ -2351,28 +2469,30 @@ var de_default = {
2351
2469
  "login.cancel-label": "Nicht das richtige Konto?",
2352
2470
  "identities.messages.1010023": "Code an {address} senden",
2353
2471
  "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.",
2354
- "identities.messages.1010017": "",
2355
- "identities.messages.1010018": "",
2356
- "identities.messages.1010019": "",
2472
+ "identities.messages.1010017": "Anmelden und verbinden",
2473
+ "identities.messages.1010018": "Mit {provider} best\xE4tigen",
2474
+ "identities.messages.1010019": "Code senden um fortzufahren",
2357
2475
  "identities.messages.1010020": "",
2358
- "identities.messages.1010021": "",
2359
- "identities.messages.1010022": "",
2360
- "identities.messages.1040007": "",
2361
- "identities.messages.1040008": "",
2362
- "identities.messages.1040009": "",
2476
+ "identities.messages.1010021": "Mit Paskey anmelden",
2477
+ "identities.messages.1010022": "Mit Passwort anmelden",
2478
+ "identities.messages.1040007": "Mit Passkey registrieren",
2479
+ "identities.messages.1040008": "Zur\xFCck",
2480
+ "identities.messages.1040009": "Bitte w\xE4hlen Sie eine Authentifizierungsmethode, um fortzufahren.",
2363
2481
  "identities.messages.1050019": "Passkey hinzuf\xFCgen",
2364
- "identities.messages.1050020": "",
2365
- "identities.messages.4000037": "",
2366
- "identities.messages.4010009": "",
2367
- "identities.messages.4010010": "",
2482
+ "identities.messages.1050020": 'Passkey "{display_name}" entfernen',
2483
+ "identities.messages.4000037": "F\xFCr die eingegebenen Daten existiert kein Account",
2484
+ "identities.messages.4010009": "Die Authentifizierungsmethode stimmt nicht mit der vorherigen Authentifizierungsmethode \xFCberein. Bitte versuchen Sie es erneut.",
2485
+ "identities.messages.4010010": "Die eingegebene Adresse stimmt nicht mit der Adresse \xFCberein, die Sie bei der Registrierung angegeben haben. Bitte versuchen Sie es erneut.",
2368
2486
  "input.placeholder": "{placeholder} eingeben",
2369
- "card.header.parts.code": "einem Code per E-Mail",
2487
+ "card.header.parts.code": "ein an Sie gesendeter Code",
2370
2488
  "card.header.parts.identifier-first": "Ihr {identifierLabel}",
2371
2489
  "card.header.parts.oidc": "ein sozialer Anbieter",
2372
2490
  "card.header.parts.passkey": "ein Passkey",
2373
2491
  "card.header.parts.password.login": "Ihrer {identifierLabel} und Ihrem Passwort",
2374
2492
  "card.header.parts.password.registration": "Ihrer {identifierLabel} und einem Passwort",
2375
2493
  "card.header.parts.webauthn": "ein Sicherheitsschl\xFCssel",
2494
+ "card.header.parts.totp": "deine Authentifikator-App",
2495
+ "card.header.parts.lookup_secret": "ein Backup-Wiederherstellungscode",
2376
2496
  "recovery.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um einen einmaligen Zugangscode zu erhalten",
2377
2497
  "verification.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um es zu best\xE4tigen",
2378
2498
  "card.header.description.login": "Melden Sie sich mit {identifierLabel} an",
@@ -2465,7 +2585,6 @@ var es_default = {
2465
2585
  "error.back-button": "Regresar",
2466
2586
  "error.description": "Ocurri\xF3 un error con el siguiente mensaje:",
2467
2587
  "error.support-email-link": "Si el problema persiste, por favor contacte a <a>{contactSupportEmail}</a>",
2468
- "error.title": "",
2469
2588
  "error.title-internal-server-error": "Error Interno del Servidor",
2470
2589
  "error.title-not-found": "404 - P\xE1gina no encontrada",
2471
2590
  "identities.messages.1010001": "Iniciar sesi\xF3n",
@@ -2640,45 +2759,6 @@ var es_default = {
2640
2759
  "two-step.totp.description": "Utilice un c\xF3digo de un solo uso de 6 d\xEDgitos de su aplicaci\xF3n de autenticaci\xF3n",
2641
2760
  "two-step.lookup_secret.title": "C\xF3digo de recuperaci\xF3n de respaldo",
2642
2761
  "two-step.lookup_secret.description": "Utilice uno de sus c\xF3digos de respaldo de 8 d\xEDgitos para autenticarse",
2643
- "identities.messages.1010016": "",
2644
- "identities.messages.1010017": "",
2645
- "identities.messages.1010018": "",
2646
- "identities.messages.1010019": "",
2647
- "identities.messages.1010020": "",
2648
- "identities.messages.1010021": "",
2649
- "identities.messages.1010022": "",
2650
- "identities.messages.1010023": "",
2651
- "identities.messages.1040007": "",
2652
- "identities.messages.1040008": "",
2653
- "identities.messages.1040009": "",
2654
- "identities.messages.1050019": "",
2655
- "identities.messages.1050020": "",
2656
- "identities.messages.1070014": "",
2657
- "identities.messages.1070015": "",
2658
- "identities.messages.4000037": "",
2659
- "identities.messages.4000038": "",
2660
- "identities.messages.4010009": "",
2661
- "identities.messages.4010010": "",
2662
- "login.cancel-button": "",
2663
- "login.cancel-label": "",
2664
- "input.placeholder": "",
2665
- "card.header.description.login": "",
2666
- "card.header.description.registration": "",
2667
- "card.header.parts.code": "",
2668
- "card.header.parts.identifier-first": "",
2669
- "card.header.parts.oidc": "",
2670
- "card.header.parts.passkey": "",
2671
- "card.header.parts.password.login": "",
2672
- "card.header.parts.password.registration": "",
2673
- "card.header.parts.webauthn": "",
2674
- "forms.label.forgot-password": "",
2675
- "login.subtitle": "",
2676
- "login.subtitle-refresh": "",
2677
- "misc.or": "",
2678
- "recovery.subtitle": "",
2679
- "registration.subtitle": "",
2680
- "settings.subtitle": "",
2681
- "verification.subtitle": "",
2682
2762
  "settings.totp.info.linked": "Actualmente tienes una aplicaci\xF3n de autenticaci\xF3n conectada.",
2683
2763
  "settings.totp.info.not-linked": "Para habilitar, escanea el c\xF3digo QR con tu autenticador e ingresa el c\xF3digo.",
2684
2764
  "settings.totp.title": "Aplicaci\xF3n Autenticadora",
@@ -2696,25 +2776,6 @@ var es_default = {
2696
2776
  "settings.profile.title": "Configuraci\xF3n de Perfil",
2697
2777
  "settings.webauthn.description": "Administra la configuraci\xF3n de tu token de hardware",
2698
2778
  "settings.webauthn.title": "Gestionar Tokens de Hardware",
2699
- "settings.oidc.info": "",
2700
- "settings.passkey.info": "",
2701
- "settings.title-lookup-secret": "",
2702
- "settings.title-navigation": "",
2703
- "settings.title-oidc": "",
2704
- "settings.title-passkey": "",
2705
- "settings.title-password": "",
2706
- "settings.title-profile": "",
2707
- "settings.title-totp": "",
2708
- "settings.title-webauthn": "",
2709
- "settings.webauthn.info": "",
2710
- "card.footer.select-another-method": "",
2711
- "account-linking.title": "",
2712
- "property.code": "",
2713
- "property.email": "",
2714
- "property.identifier": "",
2715
- "property.password": "",
2716
- "property.phone": "",
2717
- "property.username": "",
2718
2779
  "consent.title": "Autorizar {party}",
2719
2780
  "consent.subtitle": "Una aplicaci\xF3n de terceros quiere acceder a la informaci\xF3n asociada a su cuenta {identifier}.",
2720
2781
  "consent.scope.openid.title": "Identidad",
@@ -2729,12 +2790,73 @@ var es_default = {
2729
2790
  "consent.scope.address.description": "Acceda a su direcci\xF3n postal.",
2730
2791
  "consent.scope.phone.title": "N\xFAmero de tel\xE9fono",
2731
2792
  "consent.scope.phone.description": "Recupere su n\xFAmero de tel\xE9fono y su estado de verificaci\xF3n.",
2732
- "error.action.go-back": "",
2733
- "error.footer.copy": "",
2734
- "error.footer.text": "",
2735
- "error.instructions": "",
2736
- "error.title.what-can-i-do": "",
2737
- "error.title.what-happened": ""
2793
+ "error.title": "Ocurri\xF3 un error",
2794
+ "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.',
2795
+ "identities.messages.1010017": "Iniciar sesi\xF3n y vincular",
2796
+ "identities.messages.1010018": "Confirmar con {provider}",
2797
+ "identities.messages.1010019": "Solicitar c\xF3digo para continuar",
2798
+ "identities.messages.1010021": "Iniciar sesi\xF3n con clave de acceso",
2799
+ "identities.messages.1010022": "Iniciar sesi\xF3n con contrase\xF1a",
2800
+ "identities.messages.1010023": "Enviar c\xF3digo a {address}",
2801
+ "identities.messages.1040007": "Registrarse con clave de acceso",
2802
+ "identities.messages.1040008": "Atr\xE1s",
2803
+ "identities.messages.1040009": "Por favor, elige una credencial para autenticarte.",
2804
+ "identities.messages.1050019": "Agregar clave de acceso",
2805
+ "identities.messages.1070014": "Iniciar sesi\xF3n y vincular credencial",
2806
+ "identities.messages.1070015": "Por favor, completa el desaf\xEDo captcha para continuar.",
2807
+ "identities.messages.4000037": "Esta cuenta no existe o no tiene ning\xFAn m\xE9todo de inicio de sesi\xF3n configurado.",
2808
+ "identities.messages.4000038": "Fall\xF3 la verificaci\xF3n de Captcha, por favor intenta de nuevo.",
2809
+ "identities.messages.4010009": "Las credenciales vinculadas no coinciden.",
2810
+ "identities.messages.4010010": "La direcci\xF3n que ingresaste no coincide con ninguna direcci\xF3n conocida en la cuenta actual.",
2811
+ "login.cancel-button": "Cancelar",
2812
+ "login.cancel-label": "\xBFNo es la cuenta correcta?",
2813
+ "login.subtitle": "Iniciar sesi\xF3n con {parts}",
2814
+ "login.subtitle-refresh": "Confirma tu identidad con {parts}",
2815
+ "recovery.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para recibir un c\xF3digo de acceso \xFAnico",
2816
+ "registration.subtitle": "Registrarse con {parts}",
2817
+ "settings.subtitle": "Actualiza la configuraci\xF3n de tu cuenta",
2818
+ "settings.title-lookup-secret": "Administrar c\xF3digos de recuperaci\xF3n de respaldo 2FA",
2819
+ "settings.title-navigation": "Configuraci\xF3n de la cuenta",
2820
+ "settings.title-oidc": "Inicio de sesi\xF3n social",
2821
+ "settings.title-password": "Cambiar contrase\xF1a",
2822
+ "settings.title-profile": "Configuraci\xF3n del perfil",
2823
+ "settings.title-totp": "Administrar la aplicaci\xF3n de autenticaci\xF3n 2FA TOTP",
2824
+ "settings.title-webauthn": "Administrar tokens de hardware",
2825
+ "settings.title-passkey": "Administrar claves de acceso",
2826
+ "verification.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para verificarla",
2827
+ "input.placeholder": "Ingresa tu {placeholder}",
2828
+ "card.header.parts.oidc": "un proveedor social",
2829
+ "card.header.parts.password.registration": "tu {identifierLabel} y una contrase\xF1a",
2830
+ "card.header.parts.password.login": "tu {identifierLabel} y contrase\xF1a",
2831
+ "card.header.parts.code": "un c\xF3digo enviado a tu correo electr\xF3nico",
2832
+ "card.header.parts.passkey": "una clave de acceso",
2833
+ "card.header.parts.webauthn": "una clave de seguridad",
2834
+ "card.header.parts.totp": "su aplicaci\xF3n de autenticaci\xF3n",
2835
+ "card.header.parts.lookup_secret": "un c\xF3digo de recuperaci\xF3n de copia de seguridad",
2836
+ "card.header.parts.identifier-first": "tu {identifierLabel}",
2837
+ "card.header.description.login": "Iniciar sesi\xF3n con {identifierLabel}",
2838
+ "card.header.description.registration": "Registrarse con {identifierLabel}",
2839
+ "misc.or": "o",
2840
+ "forms.label.forgot-password": "\xBFOlvidaste tu contrase\xF1a?",
2841
+ "settings.oidc.info": "Las cuentas conectadas de estos proveedores se pueden utilizar para iniciar sesi\xF3n en tu cuenta",
2842
+ "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",
2843
+ "settings.passkey.info": "Administra la configuraci\xF3n de tus claves de acceso",
2844
+ "card.footer.select-another-method": "Seleccionar otro m\xE9todo",
2845
+ "account-linking.title": "Vincular cuenta",
2846
+ "property.password": "contrase\xF1a",
2847
+ "property.email": "correo electr\xF3nico",
2848
+ "property.phone": "tel\xE9fono",
2849
+ "property.username": "nombre de usuario",
2850
+ "property.identifier": "identificador",
2851
+ "property.code": "c\xF3digo",
2852
+ "error.title.what-happened": "\xBFQu\xE9 pas\xF3?",
2853
+ "error.title.what-can-i-do": "\xBFQu\xE9 puedo hacer?",
2854
+ "error.instructions": "Por favor, int\xE9ntalo de nuevo en unos minutos o contacta al operador del sitio web.",
2855
+ "error.footer.text": "Al informar este error, incluye la siguiente informaci\xF3n:",
2856
+ "error.footer.copy": "Copiar",
2857
+ "error.action.go-back": "Regresar",
2858
+ "identities.messages.1010020": "",
2859
+ "identities.messages.1050020": 'Eliminar passkey "{display_name}"'
2738
2860
  };
2739
2861
 
2740
2862
  // src/locales/fr.json
@@ -2925,81 +3047,10 @@ var fr_default = {
2925
3047
  "two-step.totp.description": "Utilisez un code \xE0 usage unique \xE0 6 chiffres provenant de votre application d'authentification",
2926
3048
  "two-step.lookup_secret.title": "Code de r\xE9cup\xE9ration de secours",
2927
3049
  "two-step.lookup_secret.description": "Utilisez l'un de vos codes de secours \xE0 8 chiffres pour vous authentifier",
2928
- "identities.messages.1010023": "",
2929
- "identities.messages.1070015": "",
2930
- "identities.messages.4000038": "",
2931
- "login.cancel-button": "",
2932
- "login.cancel-label": "",
2933
- "identities.messages.1010016": "",
2934
- "identities.messages.1010017": "",
2935
- "identities.messages.1010018": "",
2936
- "identities.messages.1010019": "",
2937
- "identities.messages.1010020": "",
2938
- "identities.messages.1010021": "",
2939
- "identities.messages.1010022": "",
2940
- "identities.messages.1040007": "",
2941
- "identities.messages.1040008": "",
2942
- "identities.messages.1040009": "",
2943
- "identities.messages.1050019": "",
2944
- "identities.messages.1050020": "",
2945
- "identities.messages.1070014": "",
2946
- "identities.messages.4000037": "",
2947
- "identities.messages.4010009": "",
2948
- "identities.messages.4010010": "",
2949
- "input.placeholder": "",
2950
- "card.header.description.login": "",
2951
- "card.header.description.registration": "",
2952
- "card.header.parts.code": "",
2953
- "card.header.parts.identifier-first": "",
2954
- "card.header.parts.oidc": "",
2955
- "card.header.parts.passkey": "",
2956
- "card.header.parts.password.login": "",
2957
- "card.header.parts.password.registration": "",
2958
- "card.header.parts.webauthn": "",
2959
- "forms.label.forgot-password": "",
2960
- "login.subtitle": "",
2961
- "login.subtitle-refresh": "",
2962
- "misc.or": "",
2963
- "recovery.subtitle": "",
2964
- "registration.subtitle": "",
2965
- "settings.subtitle": "",
2966
- "verification.subtitle": "",
2967
3050
  "settings.totp.info.linked": "Vous avez actuellement une application d'authentification connect\xE9e.",
2968
3051
  "settings.totp.info.not-linked": "Pour activer, scannez le QR code avec votre authentificateur et entrez le code.",
2969
3052
  "settings.totp.title": "Application d'authentification",
2970
3053
  "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.",
2971
- "settings.lookup_secret.description": "",
2972
- "settings.lookup_secret.title": "",
2973
- "settings.navigation.title": "",
2974
- "settings.oidc.description": "",
2975
- "settings.oidc.info": "",
2976
- "settings.oidc.title": "",
2977
- "settings.passkey.description": "",
2978
- "settings.passkey.info": "",
2979
- "settings.passkey.title": "",
2980
- "settings.password.description": "",
2981
- "settings.password.title": "",
2982
- "settings.profile.description": "",
2983
- "settings.profile.title": "",
2984
- "settings.title-lookup-secret": "",
2985
- "settings.title-navigation": "",
2986
- "settings.title-oidc": "",
2987
- "settings.title-passkey": "",
2988
- "settings.title-password": "",
2989
- "settings.title-profile": "",
2990
- "settings.title-totp": "",
2991
- "settings.title-webauthn": "",
2992
- "settings.webauthn.description": "",
2993
- "settings.webauthn.info": "",
2994
- "settings.webauthn.title": "",
2995
- "card.footer.select-another-method": "",
2996
- "account-linking.title": "",
2997
- "property.code": "",
2998
- "property.email": "",
2999
- "property.identifier": "",
3000
- "property.password": "",
3001
- "property.phone": "",
3002
- "property.username": "",
3003
3054
  "consent.title": "Autoriser {party}",
3004
3055
  "consent.subtitle": "Une application tierce souhaite acc\xE9der aux informations associ\xE9es \xE0 votre compte {identifier}.",
3005
3056
  "consent.scope.openid.title": "Identit\xE9",
@@ -3014,12 +3065,85 @@ var fr_default = {
3014
3065
  "consent.scope.address.description": "Acc\xE8de \xE0 votre adresse postale.",
3015
3066
  "consent.scope.phone.title": "Num\xE9ro de t\xE9l\xE9phone",
3016
3067
  "consent.scope.phone.description": "R\xE9cup\xE8re votre num\xE9ro de t\xE9l\xE9phone et son statut de v\xE9rification.",
3017
- "error.action.go-back": "",
3018
- "error.footer.copy": "",
3019
- "error.footer.text": "",
3020
- "error.title.what-can-i-do": "",
3021
- "error.title.what-happened": "",
3022
- "error.instructions": ""
3068
+ "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.",
3069
+ "identities.messages.1010017": "Se connecter et lier",
3070
+ "identities.messages.1010018": "Confirmer avec {provider}",
3071
+ "identities.messages.1010019": "Demander un code pour continuer",
3072
+ "identities.messages.1010021": "Se connecter avec une cl\xE9 d'acc\xE8s",
3073
+ "identities.messages.1010022": "Se connecter avec un mot de passe",
3074
+ "identities.messages.1010023": "Envoyer le code \xE0 {address}",
3075
+ "identities.messages.1040007": "S'inscrire avec une cl\xE9 d'acc\xE8s",
3076
+ "identities.messages.1040008": "Retour",
3077
+ "identities.messages.1040009": "Veuillez choisir une identification pour vous authentifier.",
3078
+ "identities.messages.1050019": "Ajouter une cl\xE9 d'acc\xE8s",
3079
+ "identities.messages.1050020": "Supprimer la cl\xE9 d'acc\xE8s \xAB {display_name} \xBB",
3080
+ "identities.messages.1070014": "Se connecter et lier l'identification",
3081
+ "identities.messages.1070015": "Veuillez compl\xE9ter le d\xE9fi captcha pour continuer.",
3082
+ "identities.messages.4000037": "Ce compte n'existe pas ou n'a aucune m\xE9thode de connexion configur\xE9e.",
3083
+ "identities.messages.4000038": "La v\xE9rification Captcha a \xE9chou\xE9, veuillez r\xE9essayer.",
3084
+ "identities.messages.4010009": "Les identifications li\xE9es ne correspondent pas.",
3085
+ "identities.messages.4010010": "L'adresse que vous avez saisie ne correspond \xE0 aucune adresse connue dans le compte actuel.",
3086
+ "login.cancel-button": "Annuler",
3087
+ "login.cancel-label": "Ce n'est pas le bon compte\xA0?",
3088
+ "login.subtitle": "Se connecter avec {parts}",
3089
+ "login.subtitle-refresh": "Confirmez votre identit\xE9 avec {parts}",
3090
+ "recovery.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour recevoir un code d'acc\xE8s unique",
3091
+ "registration.subtitle": "S'inscrire avec {parts}",
3092
+ "settings.subtitle": "Mettre \xE0 jour les param\xE8tres de votre compte",
3093
+ "settings.title-lookup-secret": "G\xE9rer les codes de r\xE9cup\xE9ration de sauvegarde 2FA",
3094
+ "settings.title-navigation": "Param\xE8tres du compte",
3095
+ "settings.title-oidc": "Connexion via les r\xE9seaux sociaux",
3096
+ "settings.title-password": "Changer le mot de passe",
3097
+ "settings.title-profile": "Param\xE8tres du profil",
3098
+ "settings.title-totp": "G\xE9rer l'application d'authentification 2FA TOTP",
3099
+ "settings.title-webauthn": "G\xE9rer les jetons mat\xE9riels",
3100
+ "settings.title-passkey": "G\xE9rer les cl\xE9s d'acc\xE8s",
3101
+ "settings.navigation.title": "Param\xE8tres du compte",
3102
+ "settings.password.title": "Changer le mot de passe",
3103
+ "settings.password.description": "Modifier votre mot de passe",
3104
+ "settings.profile.title": "Param\xE8tres du profil",
3105
+ "settings.profile.description": "Mettre \xE0 jour les informations de votre profil",
3106
+ "settings.webauthn.title": "G\xE9rer les jetons mat\xE9riels",
3107
+ "settings.webauthn.description": "G\xE9rer les param\xE8tres de votre jeton mat\xE9riel",
3108
+ "verification.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour la v\xE9rifier",
3109
+ "input.placeholder": "Saisissez votre {placeholder}",
3110
+ "card.header.parts.oidc": "un fournisseur de r\xE9seaux sociaux",
3111
+ "card.header.parts.password.registration": "votre {identifierLabel} et un mot de passe",
3112
+ "card.header.parts.password.login": "votre {identifierLabel} et votre mot de passe",
3113
+ "card.header.parts.passkey": "une cl\xE9 d'acc\xE8s",
3114
+ "card.header.parts.webauthn": "une cl\xE9 de s\xE9curit\xE9",
3115
+ "card.header.parts.identifier-first": "votre {identifierLabel}",
3116
+ "card.header.parts.code": "un code qui vous a \xE9t\xE9 envoy\xE9",
3117
+ "card.header.parts.totp": "votre application d'authentification",
3118
+ "card.header.parts.lookup_secret": "un code de r\xE9cup\xE9ration de secours",
3119
+ "card.header.description.login": "Se connecter avec {identifierLabel}",
3120
+ "card.header.description.registration": "S'inscrire avec {identifierLabel}",
3121
+ "misc.or": "ou",
3122
+ "forms.label.forgot-password": "Mot de passe oubli\xE9?",
3123
+ "settings.lookup_secret.title": "Codes de r\xE9cup\xE9ration de sauvegarde (second facteur)",
3124
+ "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.",
3125
+ "settings.oidc.title": "Comptes connect\xE9s",
3126
+ "settings.oidc.description": "Connectez un fournisseur de connexion sociale \xE0 votre compte.",
3127
+ "settings.oidc.info": "Les comptes connect\xE9s de ces fournisseurs peuvent \xEAtre utilis\xE9s pour vous connecter \xE0 votre compte",
3128
+ "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",
3129
+ "settings.passkey.title": "G\xE9rer les cl\xE9s d'acc\xE8s",
3130
+ "settings.passkey.description": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3131
+ "settings.passkey.info": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3132
+ "card.footer.select-another-method": "S\xE9lectionner une autre m\xE9thode",
3133
+ "account-linking.title": "Lier le compte",
3134
+ "property.password": "mot de passe",
3135
+ "property.email": "e-mail",
3136
+ "property.phone": "t\xE9l\xE9phone",
3137
+ "property.username": "nom d'utilisateur",
3138
+ "property.identifier": "identifiant",
3139
+ "property.code": "code",
3140
+ "error.title.what-happened": "Que s'est-il pass\xE9?",
3141
+ "error.title.what-can-i-do": "Que puis-je faire?",
3142
+ "error.instructions": "Veuillez r\xE9essayer dans quelques minutes ou contacter l'op\xE9rateur du site Web.",
3143
+ "error.footer.text": "Lorsque vous signalez cette erreur, veuillez inclure les informations suivantes:",
3144
+ "error.footer.copy": "Copier",
3145
+ "error.action.go-back": "Retour",
3146
+ "identities.messages.1010020": ""
3023
3147
  };
3024
3148
 
3025
3149
  // src/locales/nl.json
@@ -3234,7 +3358,9 @@ var nl_default = {
3234
3358
  "input.placeholder": "",
3235
3359
  "card.header.description.login": "",
3236
3360
  "card.header.description.registration": "",
3237
- "card.header.parts.code": "",
3361
+ "card.header.parts.code": "een code die naar je is verzonden",
3362
+ "card.header.parts.totp": "je authenticator-app",
3363
+ "card.header.parts.lookup_secret": "een backup herstelcode",
3238
3364
  "card.header.parts.identifier-first": "",
3239
3365
  "card.header.parts.oidc": "",
3240
3366
  "card.header.parts.passkey": "",
@@ -3519,13 +3645,15 @@ var pl_default = {
3519
3645
  "input.placeholder": "",
3520
3646
  "card.header.description.login": "",
3521
3647
  "card.header.description.registration": "",
3522
- "card.header.parts.code": "",
3523
3648
  "card.header.parts.identifier-first": "",
3524
3649
  "card.header.parts.oidc": "",
3525
3650
  "card.header.parts.passkey": "",
3526
3651
  "card.header.parts.password.login": "",
3527
3652
  "card.header.parts.password.registration": "",
3528
3653
  "card.header.parts.webauthn": "",
3654
+ "card.header.parts.code": "kod wys\u0142any do Ciebie",
3655
+ "card.header.parts.totp": "Twoja aplikacja uwierzytelniaj\u0105ca",
3656
+ "card.header.parts.lookup_secret": "kod odzyskiwania kopii zapasowej",
3529
3657
  "forms.label.forgot-password": "",
3530
3658
  "login.subtitle": "",
3531
3659
  "login.subtitle-refresh": "",
@@ -3804,7 +3932,9 @@ var pt_default = {
3804
3932
  "input.placeholder": "",
3805
3933
  "card.header.description.login": "",
3806
3934
  "card.header.description.registration": "",
3807
- "card.header.parts.code": "",
3935
+ "card.header.parts.code": "um c\xF3digo enviado para voc\xEA",
3936
+ "card.header.parts.totp": "seu aplicativo autenticador",
3937
+ "card.header.parts.lookup_secret": "um c\xF3digo de recupera\xE7\xE3o de backup",
3808
3938
  "card.header.parts.identifier-first": "",
3809
3939
  "card.header.parts.oidc": "",
3810
3940
  "card.header.parts.passkey": "",
@@ -4089,7 +4219,9 @@ var sv_default = {
4089
4219
  "input.placeholder": "Ange din {placeholder}",
4090
4220
  "card.header.description.login": "Logga in med {identifierLabel}",
4091
4221
  "card.header.description.registration": "Registrera dig med {identifierLabel}",
4092
- "card.header.parts.code": "en kod skickad till din e-post",
4222
+ "card.header.parts.code": "en kod skickad till dig",
4223
+ "card.header.parts.totp": "din autentiseringsapp",
4224
+ "card.header.parts.lookup_secret": "en s\xE4kerhetskopieringskod",
4093
4225
  "card.header.parts.identifier-first": "din {identifierLabel}",
4094
4226
  "card.header.parts.oidc": "en social leverant\xF6r",
4095
4227
  "card.header.parts.passkey": "en Passkey",