@ory/elements-react 0.0.0-pr.7af5f16 → 0.0.0-pr.8952e9a7

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.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { UiNodeGroupEnum, isUiNodeInputAttributes, isUiNodeAnchorAttributes, isUiNodeImageAttributes, isUiNodeScriptAttributes, FlowType, UiNodeInputAttributesTypeEnum, isUiNodeTextAttributes, handleContinueWith, handleFlowError, settingsUrl, isResponseError, loginUrl, recoveryUrl, verificationUrl, registrationUrl, Configuration, FrontendApi, instanceOfContinueWithRecoveryUi } from '@ory/client-fetch';
1
+ import { UiNodeGroupEnum, isUiNodeInputAttributes, isUiNodeAnchorAttributes, isUiNodeImageAttributes, isUiNodeScriptAttributes, FlowType, getNodeId, isUiNodeTextAttributes, UiNodeInputAttributesTypeEnum, handleContinueWith, handleFlowError, settingsUrl, isResponseError, loginUrl, recoveryUrl, verificationUrl, registrationUrl, Configuration, FrontendApi, instanceOfContinueWithRecoveryUi } from '@ory/client-fetch';
2
2
  import { createContext, useContext, useState, useMemo, useReducer, useRef, useEffect } from 'react';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
  import { useIntl, IntlProvider as IntlProvider$1 } from 'react-intl';
@@ -48,13 +48,18 @@ var defaultNodeOrder = [
48
48
  ];
49
49
  function defaultNodeSorter(a, b) {
50
50
  var _a, _b;
51
+ const aIsCaptcha = a.group === "captcha";
52
+ const bIsCaptcha = b.group === "captcha";
53
+ const aIsSubmit = isUiNodeInputAttributes(a.attributes) && a.attributes.type === "submit";
54
+ const bIsSubmit = isUiNodeInputAttributes(b.attributes) && b.attributes.type === "submit";
55
+ if (aIsCaptcha && bIsSubmit) {
56
+ return -1;
57
+ }
58
+ if (bIsCaptcha && aIsSubmit) {
59
+ return 1;
60
+ }
51
61
  const aGroupWeight = (_a = defaultNodeOrder.indexOf(a.group)) != null ? _a : 999;
52
62
  const bGroupWeight = (_b = defaultNodeOrder.indexOf(b.group)) != null ? _b : 999;
53
- if (b.group === "captcha" && isUiNodeInputAttributes(a.attributes) && a.attributes.type === "submit") {
54
- return aGroupWeight - (bGroupWeight - 2);
55
- } else if (a.group === "captcha" && isUiNodeInputAttributes(b.attributes) && b.attributes.type === "submit") {
56
- return aGroupWeight - 2 - bGroupWeight;
57
- }
58
63
  return aGroupWeight - bGroupWeight;
59
64
  }
60
65
  var defaultGroupOrder = [
@@ -92,28 +97,10 @@ function OryComponentProvider({
92
97
  }
93
98
  );
94
99
  }
95
- function isChoosingMethod(flow) {
96
- return flow.flow.ui.nodes.some(
97
- (node) => "name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous"
98
- ) || flow.flow.ui.nodes.some(
99
- (node) => node.group === UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
100
- ) || flow.flowType === FlowType.Login && flow.flow.requested_aal === "aal2";
101
- }
102
- function removeSsoNodes(nodes) {
103
- return nodes.filter(
104
- (node) => !(node.group === UiNodeGroupEnum.Oidc || node.group === UiNodeGroupEnum.Saml)
105
- );
106
- }
107
- function getFinalNodes(uniqueGroups, selectedGroup) {
108
- var _a, _b, _c, _d;
109
- const selectedNodes = selectedGroup ? (_a = uniqueGroups[selectedGroup]) != null ? _a : [] : [];
110
- return [
111
- ...(_b = uniqueGroups == null ? void 0 : uniqueGroups.identifier_first) != null ? _b : [],
112
- ...(_c = uniqueGroups == null ? void 0 : uniqueGroups.default) != null ? _c : [],
113
- ...(_d = uniqueGroups == null ? void 0 : uniqueGroups.captcha) != null ? _d : []
114
- ].flat().filter(
115
- (node) => "type" in node.attributes && node.attributes.type === "hidden"
116
- ).concat(selectedNodes);
100
+
101
+ // src/theme/default/utils/form.ts
102
+ function isGroupImmediateSubmit(group) {
103
+ return group === "code";
117
104
  }
118
105
  function triggerToWindowCall(trigger) {
119
106
  if (!trigger) {
@@ -225,6 +212,93 @@ function useNodesGroups(nodes, { omit } = {}) {
225
212
  var findNode = (nodes, opt) => nodes.find((n) => {
226
213
  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);
227
214
  });
215
+ function useFunctionalNodes(nodes) {
216
+ return nodes.filter(
217
+ ({ group }) => [
218
+ UiNodeGroupEnum.Default,
219
+ UiNodeGroupEnum.IdentifierFirst,
220
+ UiNodeGroupEnum.Profile,
221
+ UiNodeGroupEnum.Captcha
222
+ ].includes(group)
223
+ );
224
+ }
225
+ function isUiNodeGroupEnum(method) {
226
+ return Object.values(UiNodeGroupEnum).includes(method);
227
+ }
228
+ function isSingleSignOnNode(node) {
229
+ return node.group === UiNodeGroupEnum.Oidc || node.group === UiNodeGroupEnum.Saml;
230
+ }
231
+ function hasSingleSignOnNodes(nodes) {
232
+ return nodes.some(isSingleSignOnNode);
233
+ }
234
+ function withoutSingleSignOnNodes(nodes) {
235
+ return nodes.filter((node) => !isSingleSignOnNode(node));
236
+ }
237
+ function isNodeVisible(node) {
238
+ if (isUiNodeScriptAttributes(node.attributes)) {
239
+ return false;
240
+ } else if (isUiNodeInputAttributes(node.attributes)) {
241
+ if (node.attributes.type === "hidden") {
242
+ return false;
243
+ }
244
+ }
245
+ return true;
246
+ }
247
+ function useNodeGroupsWithVisibleNodes(nodes) {
248
+ return useMemo(() => {
249
+ var _a, _b;
250
+ const groups = {};
251
+ const groupRetained = {};
252
+ for (const node of nodes) {
253
+ const groupNodes = (_a = groups[node.group]) != null ? _a : [];
254
+ const groupCount = (_b = groupRetained[node.group]) != null ? _b : 0;
255
+ groupNodes.push(node);
256
+ groups[node.group] = groupNodes;
257
+ if (!isNodeVisible(node)) {
258
+ continue;
259
+ }
260
+ groupRetained[node.group] = groupCount + 1;
261
+ }
262
+ const finalGroups = {};
263
+ for (const [group, count] of Object.entries(groupRetained)) {
264
+ if (count > 0) {
265
+ finalGroups[group] = groups[group];
266
+ }
267
+ }
268
+ return finalGroups;
269
+ }, [nodes]);
270
+ }
271
+
272
+ // src/components/card/two-step/utils.ts
273
+ function isChoosingMethod(flow) {
274
+ return flow.flow.ui.nodes.some(
275
+ (node) => "name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous"
276
+ ) || flow.flow.ui.nodes.some(
277
+ (node) => node.group === UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
278
+ ) || flow.flowType === FlowType.Login && flow.flow.requested_aal === "aal2";
279
+ }
280
+ function getFinalNodes(uniqueGroups, selectedGroup) {
281
+ var _a, _b, _c, _d;
282
+ const selectedNodes = selectedGroup ? (_a = uniqueGroups[selectedGroup]) != null ? _a : [] : [];
283
+ return [
284
+ ...(_b = uniqueGroups == null ? void 0 : uniqueGroups.identifier_first) != null ? _b : [],
285
+ ...(_c = uniqueGroups == null ? void 0 : uniqueGroups.default) != null ? _c : [],
286
+ ...(_d = uniqueGroups == null ? void 0 : uniqueGroups.captcha) != null ? _d : []
287
+ ].flat().filter(
288
+ (node) => "type" in node.attributes && node.attributes.type === "hidden"
289
+ ).concat(selectedNodes);
290
+ }
291
+ var handleAfterFormSubmit = (dispatchFormState) => (method) => {
292
+ if (typeof method !== "string" || !isUiNodeGroupEnum(method)) {
293
+ return;
294
+ }
295
+ if (isGroupImmediateSubmit(method)) {
296
+ dispatchFormState({
297
+ type: "action_select_method",
298
+ method
299
+ });
300
+ }
301
+ };
228
302
 
229
303
  // src/context/form-state.ts
230
304
  function findMethodWithMessage(nodes) {
@@ -490,15 +564,11 @@ function OryCardContent({ children }) {
490
564
  const { Card } = useComponents();
491
565
  return /* @__PURE__ */ jsx(Card.Content, { children });
492
566
  }
493
-
494
- // src/theme/default/utils/form.ts
495
- function isGroupImmediateSubmit(group) {
496
- return group === "code";
497
- }
498
567
  function frontendClient(sdkUrl, opts = {}) {
499
568
  const config = new Configuration({
500
569
  ...opts,
501
570
  basePath: sdkUrl,
571
+ credentials: "include",
502
572
  headers: {
503
573
  Accept: "application/json",
504
574
  ...opts.headers
@@ -892,6 +962,9 @@ function OryForm({
892
962
  const onSubmit = useOryFormSubmit(onAfterSubmit);
893
963
  const hasMethods = flowContainer.flow.ui.nodes.some((node) => {
894
964
  if (isUiNodeInputAttributes(node.attributes)) {
965
+ if (node.attributes.type === "hidden") {
966
+ return false;
967
+ }
895
968
  return node.attributes.name !== "csrf_token";
896
969
  } else if (isUiNodeAnchorAttributes(node.attributes)) {
897
970
  return true;
@@ -911,12 +984,9 @@ function OryForm({
911
984
  }),
912
985
  type: "error"
913
986
  };
914
- return /* @__PURE__ */ jsxs("div", { className: "grid gap-8", "data-testid": dataTestId, children: [
915
- /* @__PURE__ */ jsx(Message.Root, { children: /* @__PURE__ */ jsx(Message.Content, { message: m }, m.id) }),
916
- /* @__PURE__ */ jsx(OryCardFooter, {})
917
- ] });
987
+ return /* @__PURE__ */ jsx("div", { "data-testid": dataTestId, children: /* @__PURE__ */ jsx(Message.Root, { children: /* @__PURE__ */ jsx(Message.Content, { message: m }, m.id) }) });
918
988
  }
919
- if (flowContainer.flowType === FlowType.Login && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
989
+ if ((flowContainer.flowType === FlowType.Login || flowContainer.flowType === FlowType.Registration) && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
920
990
  methods.setValue("method", "code");
921
991
  }
922
992
  return /* @__PURE__ */ jsx(
@@ -970,10 +1040,7 @@ var NodeInput = ({
970
1040
  const isResendNode = ((_a = node.meta.label) == null ? void 0 : _a.id) === 1070008;
971
1041
  const isScreenSelectionNode = "name" in node.attributes && node.attributes.name === "screen";
972
1042
  const setFormValue = () => {
973
- if (isResendNode || isScreenSelectionNode || node.group === UiNodeGroupEnum.Oauth2Consent) {
974
- return;
975
- }
976
- if (attrs.value !== void 0) {
1043
+ if (attrs.value && !(isResendNode || isScreenSelectionNode || node.group === UiNodeGroupEnum.Oauth2Consent)) {
977
1044
  setValue(attrs.name, attrs.value);
978
1045
  }
979
1046
  };
@@ -1117,7 +1184,7 @@ function OryFormOidcButtons() {
1117
1184
  if (filteredNodes.length === 0) {
1118
1185
  return null;
1119
1186
  }
1120
- return /* @__PURE__ */ jsx(Form.OidcRoot, { nodes: filteredNodes, children: filteredNodes.map((node, k) => /* @__PURE__ */ jsx(
1187
+ return /* @__PURE__ */ jsx(Form.OidcRoot, { nodes: filteredNodes, children: filteredNodes.map((node) => /* @__PURE__ */ jsx(
1121
1188
  Node2.OidcButton,
1122
1189
  {
1123
1190
  node,
@@ -1130,7 +1197,7 @@ function OryFormOidcButtons() {
1130
1197
  setValue("method", node.group);
1131
1198
  }
1132
1199
  },
1133
- k
1200
+ getNodeId(node)
1134
1201
  )) });
1135
1202
  }
1136
1203
  function OryFormSocialButtonsForm() {
@@ -1145,24 +1212,104 @@ function OryFormSocialButtonsForm() {
1145
1212
  }
1146
1213
  return /* @__PURE__ */ jsx(OryFormProvider, { children: /* @__PURE__ */ jsx(OryForm, { "data-testid": `ory/form/methods/oidc-saml`, children: /* @__PURE__ */ jsx(OryFormOidcButtons, {}) }) });
1147
1214
  }
1148
- function isUINodeGroupEnum(method) {
1149
- return Object.values(UiNodeGroupEnum).includes(method);
1215
+ function OryTwoStepCardStateMethodActive({
1216
+ formState
1217
+ }) {
1218
+ const { Form } = useComponents();
1219
+ const { flow, flowType, dispatchFormState } = useOryFlow();
1220
+ const { ui } = flow;
1221
+ const nodeSorter = useNodeSorter();
1222
+ const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1223
+ const groupsToShow = useNodeGroupsWithVisibleNodes(ui.nodes);
1224
+ const finalNodes = getFinalNodes(groupsToShow, formState.method);
1225
+ const selectedMethodIsSocial = formState.method === UiNodeGroupEnum.Oidc || formState.method === UiNodeGroupEnum.Saml;
1226
+ return /* @__PURE__ */ jsxs(OryCard, { children: [
1227
+ /* @__PURE__ */ jsx(OryCardHeader, {}),
1228
+ /* @__PURE__ */ jsxs(OryCardContent, { children: [
1229
+ /* @__PURE__ */ jsx(OryCardValidationMessages, {}),
1230
+ selectedMethodIsSocial && /* @__PURE__ */ jsx(OryFormSocialButtonsForm, {}),
1231
+ /* @__PURE__ */ jsx(
1232
+ OryForm,
1233
+ {
1234
+ "data-testid": `ory/form/methods/local`,
1235
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1236
+ children: /* @__PURE__ */ jsxs(Form.Group, { children: [
1237
+ ui.nodes.filter(
1238
+ (n) => isUiNodeScriptAttributes(n.attributes) || n.group === UiNodeGroupEnum.Default || n.group === UiNodeGroupEnum.Profile
1239
+ ).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k)),
1240
+ finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1241
+ ] })
1242
+ }
1243
+ )
1244
+ ] }),
1245
+ /* @__PURE__ */ jsx(OryCardFooter, {})
1246
+ ] });
1150
1247
  }
1151
- function OryTwoStepCard() {
1152
- var _a, _b, _c, _d;
1248
+ function OryTwoStepCardStateProvideIdentifier() {
1153
1249
  const { Form, Card } = useComponents();
1154
- const { flow, flowType, formState, dispatchFormState } = useOryFlow();
1155
- const { ui } = flow;
1250
+ const { flowType, flow, dispatchFormState } = useOryFlow();
1156
1251
  const nodeSorter = useNodeSorter();
1157
1252
  const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1158
- const groupsToShow = useNodesGroups(ui.nodes, {
1159
- // We only want to render groups that have visible elements.
1160
- omit: ["script", "input_hidden"]
1161
- });
1162
- const authMethodBlocks = Object.fromEntries(
1253
+ const nonSsoNodes = withoutSingleSignOnNodes(flow.ui.nodes).sort(sortNodes);
1254
+ const hasSso = flow.ui.nodes.filter(isNodeVisible).some(
1255
+ (node) => node.group === UiNodeGroupEnum.Oidc || node.group === UiNodeGroupEnum.Saml
1256
+ );
1257
+ const showSsoDivider = hasSso && nonSsoNodes.some(isNodeVisible);
1258
+ return /* @__PURE__ */ jsxs(OryCard, { children: [
1259
+ /* @__PURE__ */ jsx(OryCardHeader, {}),
1260
+ /* @__PURE__ */ jsxs(OryCardContent, { children: [
1261
+ /* @__PURE__ */ jsx(OryCardValidationMessages, {}),
1262
+ /* @__PURE__ */ jsx(OryFormSocialButtonsForm, {}),
1263
+ /* @__PURE__ */ jsx(
1264
+ OryForm,
1265
+ {
1266
+ "data-testid": `ory/form/methods/local`,
1267
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1268
+ children: /* @__PURE__ */ jsxs(Form.Group, { children: [
1269
+ showSsoDivider && /* @__PURE__ */ jsx(Card.Divider, {}),
1270
+ nonSsoNodes.map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1271
+ ] })
1272
+ }
1273
+ )
1274
+ ] }),
1275
+ /* @__PURE__ */ jsx(OryCardFooter, {})
1276
+ ] });
1277
+ }
1278
+ function AuthMethodList({
1279
+ options,
1280
+ setSelectedGroup
1281
+ }) {
1282
+ const { Card } = useComponents();
1283
+ const { setValue, getValues } = useFormContext();
1284
+ if (Object.entries(options).length === 0) {
1285
+ return null;
1286
+ }
1287
+ const handleClick = (group, options2) => {
1288
+ var _a, _b, _c, _d;
1289
+ if (isGroupImmediateSubmit(group)) {
1290
+ if (group === "code" && !getValues("identifier") && ((_b = (_a = options2 == null ? void 0 : options2.title) == null ? void 0 : _a.values) == null ? void 0 : _b.address)) {
1291
+ setValue("identifier", (_d = (_c = options2 == null ? void 0 : options2.title) == null ? void 0 : _c.values) == null ? void 0 : _d.address);
1292
+ }
1293
+ setValue("method", group);
1294
+ } else {
1295
+ setSelectedGroup(group);
1296
+ }
1297
+ };
1298
+ return /* @__PURE__ */ jsx(Card.AuthMethodListContainer, { children: Object.entries(options).map(([group, options2]) => /* @__PURE__ */ jsx(
1299
+ Card.AuthMethodListItem,
1300
+ {
1301
+ group,
1302
+ title: options2.title,
1303
+ onClick: () => handleClick(group, options2)
1304
+ },
1305
+ group
1306
+ )) });
1307
+ }
1308
+ function toAuthMethodPickerOptions(visibleGroups) {
1309
+ return Object.fromEntries(
1163
1310
  Object.values(UiNodeGroupEnum).filter((group) => {
1164
- var _a2;
1165
- return (_a2 = groupsToShow.groups[group]) == null ? void 0 : _a2.length;
1311
+ var _a;
1312
+ return (_a = visibleGroups[group]) == null ? void 0 : _a.length;
1166
1313
  }).filter(
1167
1314
  (group) => ![
1168
1315
  UiNodeGroupEnum.Oidc,
@@ -1174,16 +1321,18 @@ function OryTwoStepCard() {
1174
1321
  ].includes(group)
1175
1322
  ).map((g) => [g, {}])
1176
1323
  );
1177
- const authMethodAdditionalNodes = ui.nodes.filter(
1178
- ({ group }) => [
1179
- UiNodeGroupEnum.Oidc,
1180
- UiNodeGroupEnum.Saml,
1181
- UiNodeGroupEnum.Default,
1182
- UiNodeGroupEnum.IdentifierFirst,
1183
- UiNodeGroupEnum.Profile,
1184
- UiNodeGroupEnum.Captcha
1185
- ].includes(group)
1186
- );
1324
+ }
1325
+ function OryTwoStepCardStateSelectMethod() {
1326
+ var _a, _b, _c, _d;
1327
+ const { Form, Card, Message } = useComponents();
1328
+ const { flow, flowType, dispatchFormState } = useOryFlow();
1329
+ const { ui } = flow;
1330
+ const intl = useIntl();
1331
+ const nodeSorter = useNodeSorter();
1332
+ const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1333
+ const visibleGroups = useNodeGroupsWithVisibleNodes(ui.nodes);
1334
+ const authMethodBlocks = toAuthMethodPickerOptions(visibleGroups);
1335
+ const authMethodAdditionalNodes = useFunctionalNodes(ui.nodes);
1187
1336
  if (UiNodeGroupEnum.Code in authMethodBlocks) {
1188
1337
  let identifier = (_b = (_a = findNode(ui.nodes, {
1189
1338
  group: "identifier_first",
@@ -1204,99 +1353,58 @@ function OryTwoStepCard() {
1204
1353
  };
1205
1354
  }
1206
1355
  }
1207
- const nonSsoNodes = removeSsoNodes(ui.nodes);
1208
- const finalNodes = formState.current === "method_active" ? getFinalNodes(groupsToShow.groups, formState.method) : [];
1209
- const handleAfterFormSubmit = (method) => {
1210
- if (typeof method !== "string" || !isUINodeGroupEnum(method)) {
1211
- return;
1212
- }
1213
- if (isGroupImmediateSubmit(method)) {
1214
- dispatchFormState({
1215
- type: "action_select_method",
1216
- method
1217
- });
1218
- }
1356
+ const noMethods = {
1357
+ id: 5000002,
1358
+ text: intl.formatMessage({
1359
+ id: `identities.messages.5000002`,
1360
+ defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
1361
+ }),
1362
+ type: "error"
1219
1363
  };
1220
- const hasSso = ui.nodes.some(
1221
- (node) => node.group === UiNodeGroupEnum.Oidc || node.group === UiNodeGroupEnum.Saml
1222
- );
1223
- const showSso = !(formState.current === "method_active" && !(formState.method === UiNodeGroupEnum.Oidc || formState.method === UiNodeGroupEnum.Saml));
1224
- const showSsoDivider = hasSso && nonSsoNodes.filter((n) => {
1225
- if (isUiNodeInputAttributes(n.attributes)) {
1226
- return n.attributes.type !== UiNodeInputAttributesTypeEnum.Hidden;
1227
- } else if (isUiNodeScriptAttributes(n.attributes)) {
1228
- return false;
1229
- }
1230
- return true;
1231
- }).length > 0;
1232
1364
  return /* @__PURE__ */ jsxs(OryCard, { children: [
1233
1365
  /* @__PURE__ */ jsx(OryCardHeader, {}),
1234
1366
  /* @__PURE__ */ jsxs(OryCardContent, { children: [
1235
1367
  /* @__PURE__ */ jsx(OryCardValidationMessages, {}),
1236
- showSso && /* @__PURE__ */ jsx(OryFormSocialButtonsForm, {}),
1237
- /* @__PURE__ */ jsxs(
1368
+ /* @__PURE__ */ jsx(OryFormSocialButtonsForm, {}),
1369
+ Object.entries(authMethodBlocks).length > 0 ? /* @__PURE__ */ jsx(
1238
1370
  OryForm,
1239
1371
  {
1240
1372
  "data-testid": `ory/form/methods/local`,
1241
- onAfterSubmit: handleAfterFormSubmit,
1242
- children: [
1243
- formState.current === "provide_identifier" && /* @__PURE__ */ jsxs(Form.Group, { children: [
1244
- showSsoDivider && /* @__PURE__ */ jsx(Card.Divider, {}),
1245
- nonSsoNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1246
- ] }),
1247
- formState.current === "select_method" && Object.entries(authMethodBlocks).length > 0 && /* @__PURE__ */ jsxs(Form.Group, { children: [
1248
- Object.entries(authMethodBlocks).length > 0 && /* @__PURE__ */ jsx(Card.Divider, {}),
1249
- Object.entries(authMethodBlocks).length > 0 && /* @__PURE__ */ jsx(
1250
- AuthMethodList,
1251
- {
1252
- options: authMethodBlocks,
1253
- setSelectedGroup: (group) => dispatchFormState({
1254
- type: "action_select_method",
1255
- method: group
1256
- })
1257
- }
1258
- ),
1259
- authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1260
- ] }),
1261
- formState.current === "method_active" && finalNodes.length > 0 && /* @__PURE__ */ jsxs(Form.Group, { children: [
1262
- ui.nodes.filter(
1263
- (n) => isUiNodeScriptAttributes(n.attributes) || n.group === UiNodeGroupEnum.Captcha || n.group === UiNodeGroupEnum.Default || n.group === UiNodeGroupEnum.Profile
1264
- ).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k)),
1265
- finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1266
- ] }),
1267
- /* @__PURE__ */ jsx(OryCardFooter, {})
1268
- ]
1373
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1374
+ children: /* @__PURE__ */ jsxs(Form.Group, { children: [
1375
+ /* @__PURE__ */ jsx(Card.Divider, {}),
1376
+ /* @__PURE__ */ jsx(
1377
+ AuthMethodList,
1378
+ {
1379
+ options: authMethodBlocks,
1380
+ setSelectedGroup: (group) => dispatchFormState({
1381
+ type: "action_select_method",
1382
+ method: group
1383
+ })
1384
+ }
1385
+ ),
1386
+ authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1387
+ ] })
1269
1388
  }
1270
- )
1271
- ] })
1389
+ ) : !hasSingleSignOnNodes(ui.nodes) && /* @__PURE__ */ jsx("div", { "data-testid": `ory/form/methods/local`, children: /* @__PURE__ */ jsx(Message.Root, { children: /* @__PURE__ */ jsx(Message.Content, { message: noMethods }, noMethods.id) }) })
1390
+ ] }),
1391
+ /* @__PURE__ */ jsx(OryCardFooter, {})
1272
1392
  ] });
1273
1393
  }
1274
- function AuthMethodList({ options, setSelectedGroup }) {
1275
- const { Card } = useComponents();
1276
- const { setValue, getValues } = useFormContext();
1277
- if (Object.entries(options).length === 0) {
1278
- return null;
1394
+ function OryTwoStepCard() {
1395
+ const { formState } = useOryFlow();
1396
+ switch (formState.current) {
1397
+ case "provide_identifier":
1398
+ return /* @__PURE__ */ jsx(OryTwoStepCardStateProvideIdentifier, {});
1399
+ case "select_method":
1400
+ return /* @__PURE__ */ jsx(OryTwoStepCardStateSelectMethod, {});
1401
+ case "method_active":
1402
+ return /* @__PURE__ */ jsx(OryTwoStepCardStateMethodActive, { formState });
1279
1403
  }
1280
- const handleClick = (group, options2) => {
1281
- var _a, _b, _c, _d;
1282
- if (isGroupImmediateSubmit(group)) {
1283
- if (group === "code" && !getValues("identifier") && ((_b = (_a = options2 == null ? void 0 : options2.title) == null ? void 0 : _a.values) == null ? void 0 : _b.address)) {
1284
- setValue("identifier", (_d = (_c = options2 == null ? void 0 : options2.title) == null ? void 0 : _c.values) == null ? void 0 : _d.address);
1285
- }
1286
- setValue("method", group);
1287
- } else {
1288
- setSelectedGroup(group);
1289
- }
1290
- };
1291
- return /* @__PURE__ */ jsx(Card.AuthMethodListContainer, { children: Object.entries(options).map(([group, options2]) => /* @__PURE__ */ jsx(
1292
- Card.AuthMethodListItem,
1293
- {
1294
- group,
1295
- title: options2.title,
1296
- onClick: () => handleClick(group, options2)
1297
- },
1298
- group
1299
- )) });
1404
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1405
+ "unknown form state: ",
1406
+ formState.current
1407
+ ] });
1300
1408
  }
1301
1409
  function OryFormGroups({ groups }) {
1302
1410
  const {
@@ -1306,8 +1414,8 @@ function OryFormGroups({ groups }) {
1306
1414
  const { flowType } = useOryFlow();
1307
1415
  const { Form } = useComponents();
1308
1416
  const nodes = ui.nodes.filter((node) => groups.indexOf(node.group) > -1).sort((a, b) => nodeSorter(a, b, { flowType }));
1309
- return /* @__PURE__ */ jsx(Form.Group, { children: nodes.map((node, k) => {
1310
- return /* @__PURE__ */ jsx(Node, { node }, k);
1417
+ return /* @__PURE__ */ jsx(Form.Group, { children: nodes.map((node) => {
1418
+ return /* @__PURE__ */ jsx(Node, { node }, getNodeId(node));
1311
1419
  }) });
1312
1420
  }
1313
1421
  function OryFormSection({
@@ -1343,7 +1451,7 @@ function OryConsentCard() {
1343
1451
  /* @__PURE__ */ jsx(OryCardHeader, {}),
1344
1452
  /* @__PURE__ */ jsx(OryCardContent, { children: /* @__PURE__ */ jsxs(OryForm, { children: [
1345
1453
  /* @__PURE__ */ jsx(Card.Divider, {}),
1346
- /* @__PURE__ */ jsx(Form.Group, { children: flow.flow.ui.nodes.map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k)) }),
1454
+ /* @__PURE__ */ jsx(Form.Group, { children: flow.flow.ui.nodes.map((node) => /* @__PURE__ */ jsx(Node, { node }, getNodeId(node))) }),
1347
1455
  /* @__PURE__ */ jsx(Card.Divider, {}),
1348
1456
  /* @__PURE__ */ jsx(OryCardFooter, {})
1349
1457
  ] }) })
@@ -1714,7 +1822,7 @@ function SettingsSectionContent({ group, nodes }) {
1714
1822
  "data-testid": "ory/screen/settings/group/totp",
1715
1823
  children: [
1716
1824
  /* @__PURE__ */ jsx(OrySettingsTotp, { nodes: (_a = groupedNodes.groups.totp) != null ? _a : [] }),
1717
- (_b = groupedNodes.groups.default) == null ? void 0 : _b.map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1825
+ (_b = groupedNodes.groups.default) == null ? void 0 : _b.map((node) => /* @__PURE__ */ jsx(Node, { node }, getNodeId(node)))
1718
1826
  ]
1719
1827
  }
1720
1828
  );
@@ -1732,7 +1840,7 @@ function SettingsSectionContent({ group, nodes }) {
1732
1840
  nodes: (_c = groupedNodes.groups.lookup_secret) != null ? _c : []
1733
1841
  }
1734
1842
  ),
1735
- (_d = groupedNodes.groups.default) == null ? void 0 : _d.map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1843
+ (_d = groupedNodes.groups.default) == null ? void 0 : _d.map((node) => /* @__PURE__ */ jsx(Node, { node }, getNodeId(node)))
1736
1844
  ]
1737
1845
  }
1738
1846
  );
@@ -1745,7 +1853,7 @@ function SettingsSectionContent({ group, nodes }) {
1745
1853
  "data-testid": "ory/screen/settings/group/oidc",
1746
1854
  children: [
1747
1855
  /* @__PURE__ */ jsx(OrySettingsOidc, { nodes: (_e = groupedNodes.groups.oidc) != null ? _e : [] }),
1748
- (_f = groupedNodes.groups.default) == null ? void 0 : _f.map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1856
+ (_f = groupedNodes.groups.default) == null ? void 0 : _f.map((node) => /* @__PURE__ */ jsx(Node, { node }, getNodeId(node)))
1749
1857
  ]
1750
1858
  }
1751
1859
  );
@@ -1758,7 +1866,7 @@ function SettingsSectionContent({ group, nodes }) {
1758
1866
  "data-testid": "ory/screen/settings/group/webauthn",
1759
1867
  children: [
1760
1868
  /* @__PURE__ */ jsx(OrySettingsWebauthn, { nodes: (_g = groupedNodes.groups.webauthn) != null ? _g : [] }),
1761
- (_h = groupedNodes.groups.default) == null ? void 0 : _h.map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1869
+ (_h = groupedNodes.groups.default) == null ? void 0 : _h.map((node) => /* @__PURE__ */ jsx(Node, { node }, getNodeId(node)))
1762
1870
  ]
1763
1871
  }
1764
1872
  );
@@ -1771,7 +1879,7 @@ function SettingsSectionContent({ group, nodes }) {
1771
1879
  "data-testid": "ory/screen/settings/group/passkey",
1772
1880
  children: [
1773
1881
  /* @__PURE__ */ jsx(OrySettingsPasskey, { nodes: (_i = groupedNodes.groups.passkey) != null ? _i : [] }),
1774
- (_j = groupedNodes.groups.default) == null ? void 0 : _j.map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1882
+ (_j = groupedNodes.groups.default) == null ? void 0 : _j.map((node) => /* @__PURE__ */ jsx(Node, { node }, getNodeId(node)))
1775
1883
  ]
1776
1884
  }
1777
1885
  );
@@ -1792,16 +1900,16 @@ function SettingsSectionContent({ group, nodes }) {
1792
1900
  id: `settings.${group}.description`
1793
1901
  }),
1794
1902
  children: [
1795
- (_k = groupedNodes.groups.default) == null ? void 0 : _k.map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k)),
1903
+ (_k = groupedNodes.groups.default) == null ? void 0 : _k.map((node) => /* @__PURE__ */ jsx(Node, { node }, getNodeId(node))),
1796
1904
  nodes.filter(
1797
1905
  (node) => "type" in node.attributes && node.attributes.type !== "submit"
1798
- ).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1906
+ ).map((node) => /* @__PURE__ */ jsx(Node, { node }, getNodeId(node)))
1799
1907
  ]
1800
1908
  }
1801
1909
  ),
1802
1910
  /* @__PURE__ */ jsx(Card.SettingsSectionFooter, { children: nodes.filter(
1803
1911
  (node) => "type" in node.attributes && node.attributes.type === "submit"
1804
- ).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k)) })
1912
+ ).map((node) => /* @__PURE__ */ jsx(Node, { node }, getNodeId(node))) })
1805
1913
  ]
1806
1914
  }
1807
1915
  );
@@ -1815,7 +1923,7 @@ function OrySettingsCard() {
1815
1923
  const scriptNodes = onlyScriptNodes(flow.ui.nodes);
1816
1924
  return /* @__PURE__ */ jsxs(Fragment, { children: [
1817
1925
  /* @__PURE__ */ jsx(OryCardValidationMessages, {}),
1818
- scriptNodes.map((n) => /* @__PURE__ */ jsx(Node, { node: n })),
1926
+ scriptNodes.map((n) => /* @__PURE__ */ jsx(Node, { node: n }, getNodeId(n))),
1819
1927
  uniqueGroups.entries.map(([group, nodes]) => {
1820
1928
  if (group === UiNodeGroupEnum.Default) {
1821
1929
  return null;
@@ -2122,9 +2230,11 @@ var en_default = {
2122
2230
  "card.header.parts.oidc": "a social provider",
2123
2231
  "card.header.parts.password.registration": "your {identifierLabel} and a password",
2124
2232
  "card.header.parts.password.login": "your {identifierLabel} and password",
2125
- "card.header.parts.code": "a code sent to your email",
2233
+ "card.header.parts.code": "a code sent to you",
2126
2234
  "card.header.parts.passkey": "a Passkey",
2127
2235
  "card.header.parts.webauthn": "a security key",
2236
+ "card.header.parts.totp": "your authenticator app",
2237
+ "card.header.parts.lookup_secret": "a backup recovery code",
2128
2238
  "card.header.parts.identifier-first": "your {identifierLabel}",
2129
2239
  "card.header.description.login": "Sign in with {identifierLabel}",
2130
2240
  "card.header.description.registration": "Sign up with {identifierLabel}",
@@ -2357,28 +2467,30 @@ var de_default = {
2357
2467
  "login.cancel-label": "Nicht das richtige Konto?",
2358
2468
  "identities.messages.1010023": "Code an {address} senden",
2359
2469
  "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.",
2360
- "identities.messages.1010017": "",
2361
- "identities.messages.1010018": "",
2362
- "identities.messages.1010019": "",
2470
+ "identities.messages.1010017": "Anmelden und verbinden",
2471
+ "identities.messages.1010018": "Mit {provider} best\xE4tigen",
2472
+ "identities.messages.1010019": "Code senden um fortzufahren",
2363
2473
  "identities.messages.1010020": "",
2364
- "identities.messages.1010021": "",
2365
- "identities.messages.1010022": "",
2366
- "identities.messages.1040007": "",
2367
- "identities.messages.1040008": "",
2368
- "identities.messages.1040009": "",
2474
+ "identities.messages.1010021": "Mit Paskey anmelden",
2475
+ "identities.messages.1010022": "Mit Passwort anmelden",
2476
+ "identities.messages.1040007": "Mit Passkey registrieren",
2477
+ "identities.messages.1040008": "Zur\xFCck",
2478
+ "identities.messages.1040009": "Bitte w\xE4hlen Sie eine Authentifizierungsmethode, um fortzufahren.",
2369
2479
  "identities.messages.1050019": "Passkey hinzuf\xFCgen",
2370
- "identities.messages.1050020": "",
2371
- "identities.messages.4000037": "",
2372
- "identities.messages.4010009": "",
2373
- "identities.messages.4010010": "",
2480
+ "identities.messages.1050020": 'Passkey "{display_name}" entfernen',
2481
+ "identities.messages.4000037": "F\xFCr die eingegebenen Daten existiert kein Account",
2482
+ "identities.messages.4010009": "Die Authentifizierungsmethode stimmt nicht mit der vorherigen Authentifizierungsmethode \xFCberein. Bitte versuchen Sie es erneut.",
2483
+ "identities.messages.4010010": "Die eingegebene Adresse stimmt nicht mit der Adresse \xFCberein, die Sie bei der Registrierung angegeben haben. Bitte versuchen Sie es erneut.",
2374
2484
  "input.placeholder": "{placeholder} eingeben",
2375
- "card.header.parts.code": "einem Code per E-Mail",
2485
+ "card.header.parts.code": "ein an Sie gesendeter Code",
2376
2486
  "card.header.parts.identifier-first": "Ihr {identifierLabel}",
2377
2487
  "card.header.parts.oidc": "ein sozialer Anbieter",
2378
2488
  "card.header.parts.passkey": "ein Passkey",
2379
2489
  "card.header.parts.password.login": "Ihrer {identifierLabel} und Ihrem Passwort",
2380
2490
  "card.header.parts.password.registration": "Ihrer {identifierLabel} und einem Passwort",
2381
2491
  "card.header.parts.webauthn": "ein Sicherheitsschl\xFCssel",
2492
+ "card.header.parts.totp": "deine Authentifikator-App",
2493
+ "card.header.parts.lookup_secret": "ein Backup-Wiederherstellungscode",
2382
2494
  "recovery.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um einen einmaligen Zugangscode zu erhalten",
2383
2495
  "verification.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um es zu best\xE4tigen",
2384
2496
  "card.header.description.login": "Melden Sie sich mit {identifierLabel} an",
@@ -2471,7 +2583,6 @@ var es_default = {
2471
2583
  "error.back-button": "Regresar",
2472
2584
  "error.description": "Ocurri\xF3 un error con el siguiente mensaje:",
2473
2585
  "error.support-email-link": "Si el problema persiste, por favor contacte a <a>{contactSupportEmail}</a>",
2474
- "error.title": "",
2475
2586
  "error.title-internal-server-error": "Error Interno del Servidor",
2476
2587
  "error.title-not-found": "404 - P\xE1gina no encontrada",
2477
2588
  "identities.messages.1010001": "Iniciar sesi\xF3n",
@@ -2646,45 +2757,6 @@ var es_default = {
2646
2757
  "two-step.totp.description": "Utilice un c\xF3digo de un solo uso de 6 d\xEDgitos de su aplicaci\xF3n de autenticaci\xF3n",
2647
2758
  "two-step.lookup_secret.title": "C\xF3digo de recuperaci\xF3n de respaldo",
2648
2759
  "two-step.lookup_secret.description": "Utilice uno de sus c\xF3digos de respaldo de 8 d\xEDgitos para autenticarse",
2649
- "identities.messages.1010016": "",
2650
- "identities.messages.1010017": "",
2651
- "identities.messages.1010018": "",
2652
- "identities.messages.1010019": "",
2653
- "identities.messages.1010020": "",
2654
- "identities.messages.1010021": "",
2655
- "identities.messages.1010022": "",
2656
- "identities.messages.1010023": "",
2657
- "identities.messages.1040007": "",
2658
- "identities.messages.1040008": "",
2659
- "identities.messages.1040009": "",
2660
- "identities.messages.1050019": "",
2661
- "identities.messages.1050020": "",
2662
- "identities.messages.1070014": "",
2663
- "identities.messages.1070015": "",
2664
- "identities.messages.4000037": "",
2665
- "identities.messages.4000038": "",
2666
- "identities.messages.4010009": "",
2667
- "identities.messages.4010010": "",
2668
- "login.cancel-button": "",
2669
- "login.cancel-label": "",
2670
- "input.placeholder": "",
2671
- "card.header.description.login": "",
2672
- "card.header.description.registration": "",
2673
- "card.header.parts.code": "",
2674
- "card.header.parts.identifier-first": "",
2675
- "card.header.parts.oidc": "",
2676
- "card.header.parts.passkey": "",
2677
- "card.header.parts.password.login": "",
2678
- "card.header.parts.password.registration": "",
2679
- "card.header.parts.webauthn": "",
2680
- "forms.label.forgot-password": "",
2681
- "login.subtitle": "",
2682
- "login.subtitle-refresh": "",
2683
- "misc.or": "",
2684
- "recovery.subtitle": "",
2685
- "registration.subtitle": "",
2686
- "settings.subtitle": "",
2687
- "verification.subtitle": "",
2688
2760
  "settings.totp.info.linked": "Actualmente tienes una aplicaci\xF3n de autenticaci\xF3n conectada.",
2689
2761
  "settings.totp.info.not-linked": "Para habilitar, escanea el c\xF3digo QR con tu autenticador e ingresa el c\xF3digo.",
2690
2762
  "settings.totp.title": "Aplicaci\xF3n Autenticadora",
@@ -2702,25 +2774,6 @@ var es_default = {
2702
2774
  "settings.profile.title": "Configuraci\xF3n de Perfil",
2703
2775
  "settings.webauthn.description": "Administra la configuraci\xF3n de tu token de hardware",
2704
2776
  "settings.webauthn.title": "Gestionar Tokens de Hardware",
2705
- "settings.oidc.info": "",
2706
- "settings.passkey.info": "",
2707
- "settings.title-lookup-secret": "",
2708
- "settings.title-navigation": "",
2709
- "settings.title-oidc": "",
2710
- "settings.title-passkey": "",
2711
- "settings.title-password": "",
2712
- "settings.title-profile": "",
2713
- "settings.title-totp": "",
2714
- "settings.title-webauthn": "",
2715
- "settings.webauthn.info": "",
2716
- "card.footer.select-another-method": "",
2717
- "account-linking.title": "",
2718
- "property.code": "",
2719
- "property.email": "",
2720
- "property.identifier": "",
2721
- "property.password": "",
2722
- "property.phone": "",
2723
- "property.username": "",
2724
2777
  "consent.title": "Autorizar {party}",
2725
2778
  "consent.subtitle": "Una aplicaci\xF3n de terceros quiere acceder a la informaci\xF3n asociada a su cuenta {identifier}.",
2726
2779
  "consent.scope.openid.title": "Identidad",
@@ -2735,12 +2788,73 @@ var es_default = {
2735
2788
  "consent.scope.address.description": "Acceda a su direcci\xF3n postal.",
2736
2789
  "consent.scope.phone.title": "N\xFAmero de tel\xE9fono",
2737
2790
  "consent.scope.phone.description": "Recupere su n\xFAmero de tel\xE9fono y su estado de verificaci\xF3n.",
2738
- "error.action.go-back": "",
2739
- "error.footer.copy": "",
2740
- "error.footer.text": "",
2741
- "error.instructions": "",
2742
- "error.title.what-can-i-do": "",
2743
- "error.title.what-happened": ""
2791
+ "error.title": "Ocurri\xF3 un error",
2792
+ "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.',
2793
+ "identities.messages.1010017": "Iniciar sesi\xF3n y vincular",
2794
+ "identities.messages.1010018": "Confirmar con {provider}",
2795
+ "identities.messages.1010019": "Solicitar c\xF3digo para continuar",
2796
+ "identities.messages.1010021": "Iniciar sesi\xF3n con clave de acceso",
2797
+ "identities.messages.1010022": "Iniciar sesi\xF3n con contrase\xF1a",
2798
+ "identities.messages.1010023": "Enviar c\xF3digo a {address}",
2799
+ "identities.messages.1040007": "Registrarse con clave de acceso",
2800
+ "identities.messages.1040008": "Atr\xE1s",
2801
+ "identities.messages.1040009": "Por favor, elige una credencial para autenticarte.",
2802
+ "identities.messages.1050019": "Agregar clave de acceso",
2803
+ "identities.messages.1070014": "Iniciar sesi\xF3n y vincular credencial",
2804
+ "identities.messages.1070015": "Por favor, completa el desaf\xEDo captcha para continuar.",
2805
+ "identities.messages.4000037": "Esta cuenta no existe o no tiene ning\xFAn m\xE9todo de inicio de sesi\xF3n configurado.",
2806
+ "identities.messages.4000038": "Fall\xF3 la verificaci\xF3n de Captcha, por favor intenta de nuevo.",
2807
+ "identities.messages.4010009": "Las credenciales vinculadas no coinciden.",
2808
+ "identities.messages.4010010": "La direcci\xF3n que ingresaste no coincide con ninguna direcci\xF3n conocida en la cuenta actual.",
2809
+ "login.cancel-button": "Cancelar",
2810
+ "login.cancel-label": "\xBFNo es la cuenta correcta?",
2811
+ "login.subtitle": "Iniciar sesi\xF3n con {parts}",
2812
+ "login.subtitle-refresh": "Confirma tu identidad con {parts}",
2813
+ "recovery.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para recibir un c\xF3digo de acceso \xFAnico",
2814
+ "registration.subtitle": "Registrarse con {parts}",
2815
+ "settings.subtitle": "Actualiza la configuraci\xF3n de tu cuenta",
2816
+ "settings.title-lookup-secret": "Administrar c\xF3digos de recuperaci\xF3n de respaldo 2FA",
2817
+ "settings.title-navigation": "Configuraci\xF3n de la cuenta",
2818
+ "settings.title-oidc": "Inicio de sesi\xF3n social",
2819
+ "settings.title-password": "Cambiar contrase\xF1a",
2820
+ "settings.title-profile": "Configuraci\xF3n del perfil",
2821
+ "settings.title-totp": "Administrar la aplicaci\xF3n de autenticaci\xF3n 2FA TOTP",
2822
+ "settings.title-webauthn": "Administrar tokens de hardware",
2823
+ "settings.title-passkey": "Administrar claves de acceso",
2824
+ "verification.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para verificarla",
2825
+ "input.placeholder": "Ingresa tu {placeholder}",
2826
+ "card.header.parts.oidc": "un proveedor social",
2827
+ "card.header.parts.password.registration": "tu {identifierLabel} y una contrase\xF1a",
2828
+ "card.header.parts.password.login": "tu {identifierLabel} y contrase\xF1a",
2829
+ "card.header.parts.code": "un c\xF3digo enviado a tu correo electr\xF3nico",
2830
+ "card.header.parts.passkey": "una clave de acceso",
2831
+ "card.header.parts.webauthn": "una clave de seguridad",
2832
+ "card.header.parts.totp": "su aplicaci\xF3n de autenticaci\xF3n",
2833
+ "card.header.parts.lookup_secret": "un c\xF3digo de recuperaci\xF3n de copia de seguridad",
2834
+ "card.header.parts.identifier-first": "tu {identifierLabel}",
2835
+ "card.header.description.login": "Iniciar sesi\xF3n con {identifierLabel}",
2836
+ "card.header.description.registration": "Registrarse con {identifierLabel}",
2837
+ "misc.or": "o",
2838
+ "forms.label.forgot-password": "\xBFOlvidaste tu contrase\xF1a?",
2839
+ "settings.oidc.info": "Las cuentas conectadas de estos proveedores se pueden utilizar para iniciar sesi\xF3n en tu cuenta",
2840
+ "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",
2841
+ "settings.passkey.info": "Administra la configuraci\xF3n de tus claves de acceso",
2842
+ "card.footer.select-another-method": "Seleccionar otro m\xE9todo",
2843
+ "account-linking.title": "Vincular cuenta",
2844
+ "property.password": "contrase\xF1a",
2845
+ "property.email": "correo electr\xF3nico",
2846
+ "property.phone": "tel\xE9fono",
2847
+ "property.username": "nombre de usuario",
2848
+ "property.identifier": "identificador",
2849
+ "property.code": "c\xF3digo",
2850
+ "error.title.what-happened": "\xBFQu\xE9 pas\xF3?",
2851
+ "error.title.what-can-i-do": "\xBFQu\xE9 puedo hacer?",
2852
+ "error.instructions": "Por favor, int\xE9ntalo de nuevo en unos minutos o contacta al operador del sitio web.",
2853
+ "error.footer.text": "Al informar este error, incluye la siguiente informaci\xF3n:",
2854
+ "error.footer.copy": "Copiar",
2855
+ "error.action.go-back": "Regresar",
2856
+ "identities.messages.1010020": "",
2857
+ "identities.messages.1050020": 'Eliminar passkey "{display_name}"'
2744
2858
  };
2745
2859
 
2746
2860
  // src/locales/fr.json
@@ -2931,81 +3045,10 @@ var fr_default = {
2931
3045
  "two-step.totp.description": "Utilisez un code \xE0 usage unique \xE0 6 chiffres provenant de votre application d'authentification",
2932
3046
  "two-step.lookup_secret.title": "Code de r\xE9cup\xE9ration de secours",
2933
3047
  "two-step.lookup_secret.description": "Utilisez l'un de vos codes de secours \xE0 8 chiffres pour vous authentifier",
2934
- "identities.messages.1010023": "",
2935
- "identities.messages.1070015": "",
2936
- "identities.messages.4000038": "",
2937
- "login.cancel-button": "",
2938
- "login.cancel-label": "",
2939
- "identities.messages.1010016": "",
2940
- "identities.messages.1010017": "",
2941
- "identities.messages.1010018": "",
2942
- "identities.messages.1010019": "",
2943
- "identities.messages.1010020": "",
2944
- "identities.messages.1010021": "",
2945
- "identities.messages.1010022": "",
2946
- "identities.messages.1040007": "",
2947
- "identities.messages.1040008": "",
2948
- "identities.messages.1040009": "",
2949
- "identities.messages.1050019": "",
2950
- "identities.messages.1050020": "",
2951
- "identities.messages.1070014": "",
2952
- "identities.messages.4000037": "",
2953
- "identities.messages.4010009": "",
2954
- "identities.messages.4010010": "",
2955
- "input.placeholder": "",
2956
- "card.header.description.login": "",
2957
- "card.header.description.registration": "",
2958
- "card.header.parts.code": "",
2959
- "card.header.parts.identifier-first": "",
2960
- "card.header.parts.oidc": "",
2961
- "card.header.parts.passkey": "",
2962
- "card.header.parts.password.login": "",
2963
- "card.header.parts.password.registration": "",
2964
- "card.header.parts.webauthn": "",
2965
- "forms.label.forgot-password": "",
2966
- "login.subtitle": "",
2967
- "login.subtitle-refresh": "",
2968
- "misc.or": "",
2969
- "recovery.subtitle": "",
2970
- "registration.subtitle": "",
2971
- "settings.subtitle": "",
2972
- "verification.subtitle": "",
2973
3048
  "settings.totp.info.linked": "Vous avez actuellement une application d'authentification connect\xE9e.",
2974
3049
  "settings.totp.info.not-linked": "Pour activer, scannez le QR code avec votre authentificateur et entrez le code.",
2975
3050
  "settings.totp.title": "Application d'authentification",
2976
3051
  "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.",
2977
- "settings.lookup_secret.description": "",
2978
- "settings.lookup_secret.title": "",
2979
- "settings.navigation.title": "",
2980
- "settings.oidc.description": "",
2981
- "settings.oidc.info": "",
2982
- "settings.oidc.title": "",
2983
- "settings.passkey.description": "",
2984
- "settings.passkey.info": "",
2985
- "settings.passkey.title": "",
2986
- "settings.password.description": "",
2987
- "settings.password.title": "",
2988
- "settings.profile.description": "",
2989
- "settings.profile.title": "",
2990
- "settings.title-lookup-secret": "",
2991
- "settings.title-navigation": "",
2992
- "settings.title-oidc": "",
2993
- "settings.title-passkey": "",
2994
- "settings.title-password": "",
2995
- "settings.title-profile": "",
2996
- "settings.title-totp": "",
2997
- "settings.title-webauthn": "",
2998
- "settings.webauthn.description": "",
2999
- "settings.webauthn.info": "",
3000
- "settings.webauthn.title": "",
3001
- "card.footer.select-another-method": "",
3002
- "account-linking.title": "",
3003
- "property.code": "",
3004
- "property.email": "",
3005
- "property.identifier": "",
3006
- "property.password": "",
3007
- "property.phone": "",
3008
- "property.username": "",
3009
3052
  "consent.title": "Autoriser {party}",
3010
3053
  "consent.subtitle": "Une application tierce souhaite acc\xE9der aux informations associ\xE9es \xE0 votre compte {identifier}.",
3011
3054
  "consent.scope.openid.title": "Identit\xE9",
@@ -3020,12 +3063,85 @@ var fr_default = {
3020
3063
  "consent.scope.address.description": "Acc\xE8de \xE0 votre adresse postale.",
3021
3064
  "consent.scope.phone.title": "Num\xE9ro de t\xE9l\xE9phone",
3022
3065
  "consent.scope.phone.description": "R\xE9cup\xE8re votre num\xE9ro de t\xE9l\xE9phone et son statut de v\xE9rification.",
3023
- "error.action.go-back": "",
3024
- "error.footer.copy": "",
3025
- "error.footer.text": "",
3026
- "error.title.what-can-i-do": "",
3027
- "error.title.what-happened": "",
3028
- "error.instructions": ""
3066
+ "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.",
3067
+ "identities.messages.1010017": "Se connecter et lier",
3068
+ "identities.messages.1010018": "Confirmer avec {provider}",
3069
+ "identities.messages.1010019": "Demander un code pour continuer",
3070
+ "identities.messages.1010021": "Se connecter avec une cl\xE9 d'acc\xE8s",
3071
+ "identities.messages.1010022": "Se connecter avec un mot de passe",
3072
+ "identities.messages.1010023": "Envoyer le code \xE0 {address}",
3073
+ "identities.messages.1040007": "S'inscrire avec une cl\xE9 d'acc\xE8s",
3074
+ "identities.messages.1040008": "Retour",
3075
+ "identities.messages.1040009": "Veuillez choisir une identification pour vous authentifier.",
3076
+ "identities.messages.1050019": "Ajouter une cl\xE9 d'acc\xE8s",
3077
+ "identities.messages.1050020": "Supprimer la cl\xE9 d'acc\xE8s \xAB {display_name} \xBB",
3078
+ "identities.messages.1070014": "Se connecter et lier l'identification",
3079
+ "identities.messages.1070015": "Veuillez compl\xE9ter le d\xE9fi captcha pour continuer.",
3080
+ "identities.messages.4000037": "Ce compte n'existe pas ou n'a aucune m\xE9thode de connexion configur\xE9e.",
3081
+ "identities.messages.4000038": "La v\xE9rification Captcha a \xE9chou\xE9, veuillez r\xE9essayer.",
3082
+ "identities.messages.4010009": "Les identifications li\xE9es ne correspondent pas.",
3083
+ "identities.messages.4010010": "L'adresse que vous avez saisie ne correspond \xE0 aucune adresse connue dans le compte actuel.",
3084
+ "login.cancel-button": "Annuler",
3085
+ "login.cancel-label": "Ce n'est pas le bon compte\xA0?",
3086
+ "login.subtitle": "Se connecter avec {parts}",
3087
+ "login.subtitle-refresh": "Confirmez votre identit\xE9 avec {parts}",
3088
+ "recovery.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour recevoir un code d'acc\xE8s unique",
3089
+ "registration.subtitle": "S'inscrire avec {parts}",
3090
+ "settings.subtitle": "Mettre \xE0 jour les param\xE8tres de votre compte",
3091
+ "settings.title-lookup-secret": "G\xE9rer les codes de r\xE9cup\xE9ration de sauvegarde 2FA",
3092
+ "settings.title-navigation": "Param\xE8tres du compte",
3093
+ "settings.title-oidc": "Connexion via les r\xE9seaux sociaux",
3094
+ "settings.title-password": "Changer le mot de passe",
3095
+ "settings.title-profile": "Param\xE8tres du profil",
3096
+ "settings.title-totp": "G\xE9rer l'application d'authentification 2FA TOTP",
3097
+ "settings.title-webauthn": "G\xE9rer les jetons mat\xE9riels",
3098
+ "settings.title-passkey": "G\xE9rer les cl\xE9s d'acc\xE8s",
3099
+ "settings.navigation.title": "Param\xE8tres du compte",
3100
+ "settings.password.title": "Changer le mot de passe",
3101
+ "settings.password.description": "Modifier votre mot de passe",
3102
+ "settings.profile.title": "Param\xE8tres du profil",
3103
+ "settings.profile.description": "Mettre \xE0 jour les informations de votre profil",
3104
+ "settings.webauthn.title": "G\xE9rer les jetons mat\xE9riels",
3105
+ "settings.webauthn.description": "G\xE9rer les param\xE8tres de votre jeton mat\xE9riel",
3106
+ "verification.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour la v\xE9rifier",
3107
+ "input.placeholder": "Saisissez votre {placeholder}",
3108
+ "card.header.parts.oidc": "un fournisseur de r\xE9seaux sociaux",
3109
+ "card.header.parts.password.registration": "votre {identifierLabel} et un mot de passe",
3110
+ "card.header.parts.password.login": "votre {identifierLabel} et votre mot de passe",
3111
+ "card.header.parts.passkey": "une cl\xE9 d'acc\xE8s",
3112
+ "card.header.parts.webauthn": "une cl\xE9 de s\xE9curit\xE9",
3113
+ "card.header.parts.identifier-first": "votre {identifierLabel}",
3114
+ "card.header.parts.code": "un code qui vous a \xE9t\xE9 envoy\xE9",
3115
+ "card.header.parts.totp": "votre application d'authentification",
3116
+ "card.header.parts.lookup_secret": "un code de r\xE9cup\xE9ration de secours",
3117
+ "card.header.description.login": "Se connecter avec {identifierLabel}",
3118
+ "card.header.description.registration": "S'inscrire avec {identifierLabel}",
3119
+ "misc.or": "ou",
3120
+ "forms.label.forgot-password": "Mot de passe oubli\xE9?",
3121
+ "settings.lookup_secret.title": "Codes de r\xE9cup\xE9ration de sauvegarde (second facteur)",
3122
+ "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.",
3123
+ "settings.oidc.title": "Comptes connect\xE9s",
3124
+ "settings.oidc.description": "Connectez un fournisseur de connexion sociale \xE0 votre compte.",
3125
+ "settings.oidc.info": "Les comptes connect\xE9s de ces fournisseurs peuvent \xEAtre utilis\xE9s pour vous connecter \xE0 votre compte",
3126
+ "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",
3127
+ "settings.passkey.title": "G\xE9rer les cl\xE9s d'acc\xE8s",
3128
+ "settings.passkey.description": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3129
+ "settings.passkey.info": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3130
+ "card.footer.select-another-method": "S\xE9lectionner une autre m\xE9thode",
3131
+ "account-linking.title": "Lier le compte",
3132
+ "property.password": "mot de passe",
3133
+ "property.email": "e-mail",
3134
+ "property.phone": "t\xE9l\xE9phone",
3135
+ "property.username": "nom d'utilisateur",
3136
+ "property.identifier": "identifiant",
3137
+ "property.code": "code",
3138
+ "error.title.what-happened": "Que s'est-il pass\xE9?",
3139
+ "error.title.what-can-i-do": "Que puis-je faire?",
3140
+ "error.instructions": "Veuillez r\xE9essayer dans quelques minutes ou contacter l'op\xE9rateur du site Web.",
3141
+ "error.footer.text": "Lorsque vous signalez cette erreur, veuillez inclure les informations suivantes:",
3142
+ "error.footer.copy": "Copier",
3143
+ "error.action.go-back": "Retour",
3144
+ "identities.messages.1010020": ""
3029
3145
  };
3030
3146
 
3031
3147
  // src/locales/nl.json
@@ -3240,7 +3356,9 @@ var nl_default = {
3240
3356
  "input.placeholder": "",
3241
3357
  "card.header.description.login": "",
3242
3358
  "card.header.description.registration": "",
3243
- "card.header.parts.code": "",
3359
+ "card.header.parts.code": "een code die naar je is verzonden",
3360
+ "card.header.parts.totp": "je authenticator-app",
3361
+ "card.header.parts.lookup_secret": "een backup herstelcode",
3244
3362
  "card.header.parts.identifier-first": "",
3245
3363
  "card.header.parts.oidc": "",
3246
3364
  "card.header.parts.passkey": "",
@@ -3525,13 +3643,15 @@ var pl_default = {
3525
3643
  "input.placeholder": "",
3526
3644
  "card.header.description.login": "",
3527
3645
  "card.header.description.registration": "",
3528
- "card.header.parts.code": "",
3529
3646
  "card.header.parts.identifier-first": "",
3530
3647
  "card.header.parts.oidc": "",
3531
3648
  "card.header.parts.passkey": "",
3532
3649
  "card.header.parts.password.login": "",
3533
3650
  "card.header.parts.password.registration": "",
3534
3651
  "card.header.parts.webauthn": "",
3652
+ "card.header.parts.code": "kod wys\u0142any do Ciebie",
3653
+ "card.header.parts.totp": "Twoja aplikacja uwierzytelniaj\u0105ca",
3654
+ "card.header.parts.lookup_secret": "kod odzyskiwania kopii zapasowej",
3535
3655
  "forms.label.forgot-password": "",
3536
3656
  "login.subtitle": "",
3537
3657
  "login.subtitle-refresh": "",
@@ -3810,7 +3930,9 @@ var pt_default = {
3810
3930
  "input.placeholder": "",
3811
3931
  "card.header.description.login": "",
3812
3932
  "card.header.description.registration": "",
3813
- "card.header.parts.code": "",
3933
+ "card.header.parts.code": "um c\xF3digo enviado para voc\xEA",
3934
+ "card.header.parts.totp": "seu aplicativo autenticador",
3935
+ "card.header.parts.lookup_secret": "um c\xF3digo de recupera\xE7\xE3o de backup",
3814
3936
  "card.header.parts.identifier-first": "",
3815
3937
  "card.header.parts.oidc": "",
3816
3938
  "card.header.parts.passkey": "",
@@ -4095,7 +4217,9 @@ var sv_default = {
4095
4217
  "input.placeholder": "Ange din {placeholder}",
4096
4218
  "card.header.description.login": "Logga in med {identifierLabel}",
4097
4219
  "card.header.description.registration": "Registrera dig med {identifierLabel}",
4098
- "card.header.parts.code": "en kod skickad till din e-post",
4220
+ "card.header.parts.code": "en kod skickad till dig",
4221
+ "card.header.parts.totp": "din autentiseringsapp",
4222
+ "card.header.parts.lookup_secret": "en s\xE4kerhetskopieringskod",
4099
4223
  "card.header.parts.identifier-first": "din {identifierLabel}",
4100
4224
  "card.header.parts.oidc": "en social leverant\xF6r",
4101
4225
  "card.header.parts.passkey": "en Passkey",