@ory/elements-react 1.0.0-next.45 → 1.0.0-next.47

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, 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';
@@ -92,28 +92,10 @@ function OryComponentProvider({
92
92
  }
93
93
  );
94
94
  }
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);
95
+
96
+ // src/theme/default/utils/form.ts
97
+ function isGroupImmediateSubmit(group) {
98
+ return group === "code";
117
99
  }
118
100
  function triggerToWindowCall(trigger) {
119
101
  if (!trigger) {
@@ -190,20 +172,28 @@ function nodesToAuthMethodGroups(nodes, excludeAuthMethods = []) {
190
172
  function useNodesGroups(nodes, { omit } = {}) {
191
173
  const groupSorter = useGroupSorter();
192
174
  const groups = useMemo(() => {
193
- var _a;
175
+ var _a, _b;
194
176
  const groups2 = {};
177
+ const groupRetained = {};
195
178
  for (const node of nodes) {
179
+ const groupNodes = (_a = groups2[node.group]) != null ? _a : [];
180
+ groupNodes.push(node);
181
+ groups2[node.group] = groupNodes;
196
182
  if ((omit == null ? void 0 : omit.includes("script")) && isUiNodeScriptAttributes(node.attributes)) {
197
183
  continue;
198
184
  }
199
185
  if ((omit == null ? void 0 : omit.includes("input_hidden")) && isUiNodeInputAttributes(node.attributes) && node.attributes.type === "hidden") {
200
186
  continue;
201
187
  }
202
- const groupNodes = (_a = groups2[node.group]) != null ? _a : [];
203
- groupNodes.push(node);
204
- groups2[node.group] = groupNodes;
188
+ groupRetained[node.group] = ((_b = groupRetained[node.group]) != null ? _b : 0) + 1;
189
+ }
190
+ const finalGroups = {};
191
+ for (const [group, count] of Object.entries(groupRetained)) {
192
+ if (count > 0) {
193
+ finalGroups[group] = groups2[group];
194
+ }
205
195
  }
206
- return groups2;
196
+ return finalGroups;
207
197
  }, [nodes, omit]);
208
198
  const entries = useMemo(
209
199
  () => Object.entries(groups).sort(([a], [b]) => groupSorter(a, b)),
@@ -217,6 +207,93 @@ function useNodesGroups(nodes, { omit } = {}) {
217
207
  var findNode = (nodes, opt) => nodes.find((n) => {
218
208
  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);
219
209
  });
210
+ function useFunctionalNodes(nodes) {
211
+ return nodes.filter(
212
+ ({ group }) => [
213
+ UiNodeGroupEnum.Default,
214
+ UiNodeGroupEnum.IdentifierFirst,
215
+ UiNodeGroupEnum.Profile,
216
+ UiNodeGroupEnum.Captcha
217
+ ].includes(group)
218
+ );
219
+ }
220
+ function isUiNodeGroupEnum(method) {
221
+ return Object.values(UiNodeGroupEnum).includes(method);
222
+ }
223
+ function isSingleSignOnNode(node) {
224
+ return node.group === UiNodeGroupEnum.Oidc || node.group === UiNodeGroupEnum.Saml;
225
+ }
226
+ function hasSingleSignOnNodes(nodes) {
227
+ return nodes.some(isSingleSignOnNode);
228
+ }
229
+ function withoutSingleSignOnNodes(nodes) {
230
+ return nodes.filter((node) => !isSingleSignOnNode(node));
231
+ }
232
+ function isNodeVisible(node) {
233
+ if (isUiNodeScriptAttributes(node.attributes)) {
234
+ return false;
235
+ } else if (isUiNodeInputAttributes(node.attributes)) {
236
+ if (node.attributes.type === "hidden") {
237
+ return false;
238
+ }
239
+ }
240
+ return true;
241
+ }
242
+ function useNodeGroupsWithVisibleNodes(nodes) {
243
+ return useMemo(() => {
244
+ var _a, _b;
245
+ const groups = {};
246
+ const groupRetained = {};
247
+ for (const node of nodes) {
248
+ const groupNodes = (_a = groups[node.group]) != null ? _a : [];
249
+ const groupCount = (_b = groupRetained[node.group]) != null ? _b : 0;
250
+ groupNodes.push(node);
251
+ groups[node.group] = groupNodes;
252
+ if (!isNodeVisible(node)) {
253
+ continue;
254
+ }
255
+ groupRetained[node.group] = groupCount + 1;
256
+ }
257
+ const finalGroups = {};
258
+ for (const [group, count] of Object.entries(groupRetained)) {
259
+ if (count > 0) {
260
+ finalGroups[group] = groups[group];
261
+ }
262
+ }
263
+ return finalGroups;
264
+ }, [nodes]);
265
+ }
266
+
267
+ // src/components/card/two-step/utils.ts
268
+ function isChoosingMethod(flow) {
269
+ return flow.flow.ui.nodes.some(
270
+ (node) => "name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous"
271
+ ) || flow.flow.ui.nodes.some(
272
+ (node) => node.group === UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
273
+ ) || flow.flowType === FlowType.Login && flow.flow.requested_aal === "aal2";
274
+ }
275
+ function getFinalNodes(uniqueGroups, selectedGroup) {
276
+ var _a, _b, _c, _d;
277
+ const selectedNodes = selectedGroup ? (_a = uniqueGroups[selectedGroup]) != null ? _a : [] : [];
278
+ return [
279
+ ...(_b = uniqueGroups == null ? void 0 : uniqueGroups.identifier_first) != null ? _b : [],
280
+ ...(_c = uniqueGroups == null ? void 0 : uniqueGroups.default) != null ? _c : [],
281
+ ...(_d = uniqueGroups == null ? void 0 : uniqueGroups.captcha) != null ? _d : []
282
+ ].flat().filter(
283
+ (node) => "type" in node.attributes && node.attributes.type === "hidden"
284
+ ).concat(selectedNodes);
285
+ }
286
+ var handleAfterFormSubmit = (dispatchFormState) => (method) => {
287
+ if (typeof method !== "string" || !isUiNodeGroupEnum(method)) {
288
+ return;
289
+ }
290
+ if (isGroupImmediateSubmit(method)) {
291
+ dispatchFormState({
292
+ type: "action_select_method",
293
+ method
294
+ });
295
+ }
296
+ };
220
297
 
221
298
  // src/context/form-state.ts
222
299
  function findMethodWithMessage(nodes) {
@@ -482,11 +559,6 @@ function OryCardContent({ children }) {
482
559
  const { Card } = useComponents();
483
560
  return /* @__PURE__ */ jsx(Card.Content, { children });
484
561
  }
485
-
486
- // src/theme/default/utils/form.ts
487
- function isGroupImmediateSubmit(group) {
488
- return group === "code";
489
- }
490
562
  function frontendClient(sdkUrl, opts = {}) {
491
563
  const config = new Configuration({
492
564
  ...opts,
@@ -884,6 +956,9 @@ function OryForm({
884
956
  const onSubmit = useOryFormSubmit(onAfterSubmit);
885
957
  const hasMethods = flowContainer.flow.ui.nodes.some((node) => {
886
958
  if (isUiNodeInputAttributes(node.attributes)) {
959
+ if (node.attributes.type === "hidden") {
960
+ return false;
961
+ }
887
962
  return node.attributes.name !== "csrf_token";
888
963
  } else if (isUiNodeAnchorAttributes(node.attributes)) {
889
964
  return true;
@@ -903,12 +978,9 @@ function OryForm({
903
978
  }),
904
979
  type: "error"
905
980
  };
906
- return /* @__PURE__ */ jsxs("div", { className: "grid gap-8", "data-testid": dataTestId, children: [
907
- /* @__PURE__ */ jsx(Message.Root, { children: /* @__PURE__ */ jsx(Message.Content, { message: m }, m.id) }),
908
- /* @__PURE__ */ jsx(OryCardFooter, {})
909
- ] });
981
+ return /* @__PURE__ */ jsx("div", { "data-testid": dataTestId, children: /* @__PURE__ */ jsx(Message.Root, { children: /* @__PURE__ */ jsx(Message.Content, { message: m }, m.id) }) });
910
982
  }
911
- if (flowContainer.flowType === FlowType.Login && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
983
+ if ((flowContainer.flowType === FlowType.Login || flowContainer.flowType === FlowType.Registration) && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
912
984
  methods.setValue("method", "code");
913
985
  }
914
986
  return /* @__PURE__ */ jsx(
@@ -962,10 +1034,7 @@ var NodeInput = ({
962
1034
  const isResendNode = ((_a = node.meta.label) == null ? void 0 : _a.id) === 1070008;
963
1035
  const isScreenSelectionNode = "name" in node.attributes && node.attributes.name === "screen";
964
1036
  const setFormValue = () => {
965
- if (isResendNode || isScreenSelectionNode || node.group === UiNodeGroupEnum.Oauth2Consent) {
966
- return;
967
- }
968
- if (attrs.value !== void 0) {
1037
+ if (attrs.value && !(isResendNode || isScreenSelectionNode || node.group === UiNodeGroupEnum.Oauth2Consent)) {
969
1038
  setValue(attrs.name, attrs.value);
970
1039
  }
971
1040
  };
@@ -1137,24 +1206,104 @@ function OryFormSocialButtonsForm() {
1137
1206
  }
1138
1207
  return /* @__PURE__ */ jsx(OryFormProvider, { children: /* @__PURE__ */ jsx(OryForm, { "data-testid": `ory/form/methods/oidc-saml`, children: /* @__PURE__ */ jsx(OryFormOidcButtons, {}) }) });
1139
1208
  }
1140
- function isUINodeGroupEnum(method) {
1141
- return Object.values(UiNodeGroupEnum).includes(method);
1209
+ function OryTwoStepCardStateMethodActive({
1210
+ formState
1211
+ }) {
1212
+ const { Form } = useComponents();
1213
+ const { flow, flowType, dispatchFormState } = useOryFlow();
1214
+ const { ui } = flow;
1215
+ const nodeSorter = useNodeSorter();
1216
+ const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1217
+ const groupsToShow = useNodeGroupsWithVisibleNodes(ui.nodes);
1218
+ const finalNodes = getFinalNodes(groupsToShow, formState.method);
1219
+ const selectedMethodIsSocial = formState.method === UiNodeGroupEnum.Oidc || formState.method === UiNodeGroupEnum.Saml;
1220
+ return /* @__PURE__ */ jsxs(OryCard, { children: [
1221
+ /* @__PURE__ */ jsx(OryCardHeader, {}),
1222
+ /* @__PURE__ */ jsxs(OryCardContent, { children: [
1223
+ /* @__PURE__ */ jsx(OryCardValidationMessages, {}),
1224
+ selectedMethodIsSocial && /* @__PURE__ */ jsx(OryFormSocialButtonsForm, {}),
1225
+ /* @__PURE__ */ jsx(
1226
+ OryForm,
1227
+ {
1228
+ "data-testid": `ory/form/methods/local`,
1229
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1230
+ children: /* @__PURE__ */ jsxs(Form.Group, { children: [
1231
+ ui.nodes.filter(
1232
+ (n) => isUiNodeScriptAttributes(n.attributes) || n.group === UiNodeGroupEnum.Captcha || n.group === UiNodeGroupEnum.Default || n.group === UiNodeGroupEnum.Profile
1233
+ ).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k)),
1234
+ finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1235
+ ] })
1236
+ }
1237
+ )
1238
+ ] }),
1239
+ /* @__PURE__ */ jsx(OryCardFooter, {})
1240
+ ] });
1142
1241
  }
1143
- function OryTwoStepCard() {
1144
- var _a, _b, _c, _d;
1242
+ function OryTwoStepCardStateProvideIdentifier() {
1145
1243
  const { Form, Card } = useComponents();
1146
- const { flow, flowType, formState, dispatchFormState } = useOryFlow();
1147
- const { ui } = flow;
1244
+ const { flowType, flow, dispatchFormState } = useOryFlow();
1148
1245
  const nodeSorter = useNodeSorter();
1149
1246
  const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1150
- const groupsToShow = useNodesGroups(ui.nodes, {
1151
- // We only want to render groups that have visible elements.
1152
- omit: ["script", "input_hidden"]
1153
- });
1154
- const authMethodBlocks = Object.fromEntries(
1247
+ const nonSsoNodes = withoutSingleSignOnNodes(flow.ui.nodes).sort(sortNodes);
1248
+ const hasSso = flow.ui.nodes.filter(isNodeVisible).some(
1249
+ (node) => node.group === UiNodeGroupEnum.Oidc || node.group === UiNodeGroupEnum.Saml
1250
+ );
1251
+ const showSsoDivider = hasSso && nonSsoNodes.some(isNodeVisible);
1252
+ return /* @__PURE__ */ jsxs(OryCard, { children: [
1253
+ /* @__PURE__ */ jsx(OryCardHeader, {}),
1254
+ /* @__PURE__ */ jsxs(OryCardContent, { children: [
1255
+ /* @__PURE__ */ jsx(OryCardValidationMessages, {}),
1256
+ /* @__PURE__ */ jsx(OryFormSocialButtonsForm, {}),
1257
+ /* @__PURE__ */ jsx(
1258
+ OryForm,
1259
+ {
1260
+ "data-testid": `ory/form/methods/local`,
1261
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1262
+ children: /* @__PURE__ */ jsxs(Form.Group, { children: [
1263
+ showSsoDivider && /* @__PURE__ */ jsx(Card.Divider, {}),
1264
+ nonSsoNodes.map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1265
+ ] })
1266
+ }
1267
+ )
1268
+ ] }),
1269
+ /* @__PURE__ */ jsx(OryCardFooter, {})
1270
+ ] });
1271
+ }
1272
+ function AuthMethodList({
1273
+ options,
1274
+ setSelectedGroup
1275
+ }) {
1276
+ const { Card } = useComponents();
1277
+ const { setValue, getValues } = useFormContext();
1278
+ if (Object.entries(options).length === 0) {
1279
+ return null;
1280
+ }
1281
+ const handleClick = (group, options2) => {
1282
+ var _a, _b, _c, _d;
1283
+ if (isGroupImmediateSubmit(group)) {
1284
+ if (group === "code" && !getValues("identifier") && ((_b = (_a = options2 == null ? void 0 : options2.title) == null ? void 0 : _a.values) == null ? void 0 : _b.address)) {
1285
+ setValue("identifier", (_d = (_c = options2 == null ? void 0 : options2.title) == null ? void 0 : _c.values) == null ? void 0 : _d.address);
1286
+ }
1287
+ setValue("method", group);
1288
+ } else {
1289
+ setSelectedGroup(group);
1290
+ }
1291
+ };
1292
+ return /* @__PURE__ */ jsx(Card.AuthMethodListContainer, { children: Object.entries(options).map(([group, options2]) => /* @__PURE__ */ jsx(
1293
+ Card.AuthMethodListItem,
1294
+ {
1295
+ group,
1296
+ title: options2.title,
1297
+ onClick: () => handleClick(group, options2)
1298
+ },
1299
+ group
1300
+ )) });
1301
+ }
1302
+ function toAuthMethodPickerOptions(visibleGroups) {
1303
+ return Object.fromEntries(
1155
1304
  Object.values(UiNodeGroupEnum).filter((group) => {
1156
- var _a2;
1157
- return (_a2 = groupsToShow.groups[group]) == null ? void 0 : _a2.length;
1305
+ var _a;
1306
+ return (_a = visibleGroups[group]) == null ? void 0 : _a.length;
1158
1307
  }).filter(
1159
1308
  (group) => ![
1160
1309
  UiNodeGroupEnum.Oidc,
@@ -1166,16 +1315,18 @@ function OryTwoStepCard() {
1166
1315
  ].includes(group)
1167
1316
  ).map((g) => [g, {}])
1168
1317
  );
1169
- const authMethodAdditionalNodes = ui.nodes.filter(
1170
- ({ group }) => [
1171
- UiNodeGroupEnum.Oidc,
1172
- UiNodeGroupEnum.Saml,
1173
- UiNodeGroupEnum.Default,
1174
- UiNodeGroupEnum.IdentifierFirst,
1175
- UiNodeGroupEnum.Profile,
1176
- UiNodeGroupEnum.Captcha
1177
- ].includes(group)
1178
- );
1318
+ }
1319
+ function OryTwoStepCardStateSelectMethod() {
1320
+ var _a, _b, _c, _d;
1321
+ const { Form, Card, Message } = useComponents();
1322
+ const { flow, flowType, dispatchFormState } = useOryFlow();
1323
+ const { ui } = flow;
1324
+ const intl = useIntl();
1325
+ const nodeSorter = useNodeSorter();
1326
+ const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1327
+ const visibleGroups = useNodeGroupsWithVisibleNodes(ui.nodes);
1328
+ const authMethodBlocks = toAuthMethodPickerOptions(visibleGroups);
1329
+ const authMethodAdditionalNodes = useFunctionalNodes(ui.nodes);
1179
1330
  if (UiNodeGroupEnum.Code in authMethodBlocks) {
1180
1331
  let identifier = (_b = (_a = findNode(ui.nodes, {
1181
1332
  group: "identifier_first",
@@ -1196,99 +1347,58 @@ function OryTwoStepCard() {
1196
1347
  };
1197
1348
  }
1198
1349
  }
1199
- const nonSsoNodes = removeSsoNodes(ui.nodes);
1200
- const finalNodes = formState.current === "method_active" ? getFinalNodes(groupsToShow.groups, formState.method) : [];
1201
- const handleAfterFormSubmit = (method) => {
1202
- if (typeof method !== "string" || !isUINodeGroupEnum(method)) {
1203
- return;
1204
- }
1205
- if (isGroupImmediateSubmit(method)) {
1206
- dispatchFormState({
1207
- type: "action_select_method",
1208
- method
1209
- });
1210
- }
1350
+ const noMethods = {
1351
+ id: 5000002,
1352
+ text: intl.formatMessage({
1353
+ id: `identities.messages.5000002`,
1354
+ defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
1355
+ }),
1356
+ type: "error"
1211
1357
  };
1212
- const hasSso = ui.nodes.some(
1213
- (node) => node.group === UiNodeGroupEnum.Oidc || node.group === UiNodeGroupEnum.Saml
1214
- );
1215
- const showSso = !(formState.current === "method_active" && !(formState.method === UiNodeGroupEnum.Oidc || formState.method === UiNodeGroupEnum.Saml));
1216
- const showSsoDivider = hasSso && nonSsoNodes.filter((n) => {
1217
- if (isUiNodeInputAttributes(n.attributes)) {
1218
- return n.attributes.type !== UiNodeInputAttributesTypeEnum.Hidden;
1219
- } else if (isUiNodeScriptAttributes(n.attributes)) {
1220
- return false;
1221
- }
1222
- return true;
1223
- }).length > 0;
1224
1358
  return /* @__PURE__ */ jsxs(OryCard, { children: [
1225
1359
  /* @__PURE__ */ jsx(OryCardHeader, {}),
1226
1360
  /* @__PURE__ */ jsxs(OryCardContent, { children: [
1227
1361
  /* @__PURE__ */ jsx(OryCardValidationMessages, {}),
1228
- showSso && /* @__PURE__ */ jsx(OryFormSocialButtonsForm, {}),
1229
- /* @__PURE__ */ jsxs(
1362
+ /* @__PURE__ */ jsx(OryFormSocialButtonsForm, {}),
1363
+ Object.entries(authMethodBlocks).length > 0 ? /* @__PURE__ */ jsx(
1230
1364
  OryForm,
1231
1365
  {
1232
1366
  "data-testid": `ory/form/methods/local`,
1233
- onAfterSubmit: handleAfterFormSubmit,
1234
- children: [
1235
- formState.current === "provide_identifier" && /* @__PURE__ */ jsxs(Form.Group, { children: [
1236
- showSsoDivider && /* @__PURE__ */ jsx(Card.Divider, {}),
1237
- nonSsoNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1238
- ] }),
1239
- formState.current === "select_method" && /* @__PURE__ */ jsxs(Form.Group, { children: [
1240
- Object.entries(authMethodBlocks).length > 0 && /* @__PURE__ */ jsx(Card.Divider, {}),
1241
- Object.entries(authMethodBlocks).length > 0 && /* @__PURE__ */ jsx(
1242
- AuthMethodList,
1243
- {
1244
- options: authMethodBlocks,
1245
- setSelectedGroup: (group) => dispatchFormState({
1246
- type: "action_select_method",
1247
- method: group
1248
- })
1249
- }
1250
- ),
1251
- authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1252
- ] }),
1253
- formState.current === "method_active" && /* @__PURE__ */ jsxs(Form.Group, { children: [
1254
- ui.nodes.filter(
1255
- (n) => isUiNodeScriptAttributes(n.attributes) || n.group === UiNodeGroupEnum.Captcha
1256
- ).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k)),
1257
- finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1258
- ] }),
1259
- /* @__PURE__ */ jsx(OryCardFooter, {})
1260
- ]
1367
+ onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1368
+ children: /* @__PURE__ */ jsxs(Form.Group, { children: [
1369
+ /* @__PURE__ */ jsx(Card.Divider, {}),
1370
+ /* @__PURE__ */ jsx(
1371
+ AuthMethodList,
1372
+ {
1373
+ options: authMethodBlocks,
1374
+ setSelectedGroup: (group) => dispatchFormState({
1375
+ type: "action_select_method",
1376
+ method: group
1377
+ })
1378
+ }
1379
+ ),
1380
+ authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
1381
+ ] })
1261
1382
  }
1262
- )
1263
- ] })
1383
+ ) : !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) }) })
1384
+ ] }),
1385
+ /* @__PURE__ */ jsx(OryCardFooter, {})
1264
1386
  ] });
1265
1387
  }
1266
- function AuthMethodList({ options, setSelectedGroup }) {
1267
- const { Card } = useComponents();
1268
- const { setValue, getValues } = useFormContext();
1269
- if (Object.entries(options).length === 0) {
1270
- return null;
1388
+ function OryTwoStepCard() {
1389
+ const { formState } = useOryFlow();
1390
+ switch (formState.current) {
1391
+ case "provide_identifier":
1392
+ return /* @__PURE__ */ jsx(OryTwoStepCardStateProvideIdentifier, {});
1393
+ case "select_method":
1394
+ return /* @__PURE__ */ jsx(OryTwoStepCardStateSelectMethod, {});
1395
+ case "method_active":
1396
+ return /* @__PURE__ */ jsx(OryTwoStepCardStateMethodActive, { formState });
1271
1397
  }
1272
- const handleClick = (group, options2) => {
1273
- var _a, _b, _c, _d;
1274
- if (isGroupImmediateSubmit(group)) {
1275
- if (group === "code" && !getValues("identifier") && ((_b = (_a = options2 == null ? void 0 : options2.title) == null ? void 0 : _a.values) == null ? void 0 : _b.address)) {
1276
- setValue("identifier", (_d = (_c = options2 == null ? void 0 : options2.title) == null ? void 0 : _c.values) == null ? void 0 : _d.address);
1277
- }
1278
- setValue("method", group);
1279
- } else {
1280
- setSelectedGroup(group);
1281
- }
1282
- };
1283
- return /* @__PURE__ */ jsx(Card.AuthMethodListContainer, { children: Object.entries(options).map(([group, options2]) => /* @__PURE__ */ jsx(
1284
- Card.AuthMethodListItem,
1285
- {
1286
- group,
1287
- title: options2.title,
1288
- onClick: () => handleClick(group, options2)
1289
- },
1290
- group
1291
- )) });
1398
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1399
+ "unknown form state: ",
1400
+ formState.current
1401
+ ] });
1292
1402
  }
1293
1403
  function OryFormGroups({ groups }) {
1294
1404
  const {
@@ -2349,20 +2459,20 @@ var de_default = {
2349
2459
  "login.cancel-label": "Nicht das richtige Konto?",
2350
2460
  "identities.messages.1010023": "Code an {address} senden",
2351
2461
  "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.",
2352
- "identities.messages.1010017": "",
2353
- "identities.messages.1010018": "",
2354
- "identities.messages.1010019": "",
2462
+ "identities.messages.1010017": "Anmelden und verbinden",
2463
+ "identities.messages.1010018": "Mit {provider} best\xE4tigen",
2464
+ "identities.messages.1010019": "Code senden um fortzufahren",
2355
2465
  "identities.messages.1010020": "",
2356
- "identities.messages.1010021": "",
2357
- "identities.messages.1010022": "",
2358
- "identities.messages.1040007": "",
2359
- "identities.messages.1040008": "",
2360
- "identities.messages.1040009": "",
2466
+ "identities.messages.1010021": "Mit Paskey anmelden",
2467
+ "identities.messages.1010022": "Mit Passwort anmelden",
2468
+ "identities.messages.1040007": "Mit Passkey registrieren",
2469
+ "identities.messages.1040008": "Zur\xFCck",
2470
+ "identities.messages.1040009": "Bitte w\xE4hlen Sie eine Authentifizierungsmethode, um fortzufahren.",
2361
2471
  "identities.messages.1050019": "Passkey hinzuf\xFCgen",
2362
- "identities.messages.1050020": "",
2363
- "identities.messages.4000037": "",
2364
- "identities.messages.4010009": "",
2365
- "identities.messages.4010010": "",
2472
+ "identities.messages.1050020": 'Passkey "{display_name}" entfernen',
2473
+ "identities.messages.4000037": "F\xFCr die eingegebenen Daten existiert kein Account",
2474
+ "identities.messages.4010009": "Die Authentifizierungsmethode stimmt nicht mit der vorherigen Authentifizierungsmethode \xFCberein. Bitte versuchen Sie es erneut.",
2475
+ "identities.messages.4010010": "Die eingegebene Adresse stimmt nicht mit der Adresse \xFCberein, die Sie bei der Registrierung angegeben haben. Bitte versuchen Sie es erneut.",
2366
2476
  "input.placeholder": "{placeholder} eingeben",
2367
2477
  "card.header.parts.code": "einem Code per E-Mail",
2368
2478
  "card.header.parts.identifier-first": "Ihr {identifierLabel}",
@@ -2463,7 +2573,6 @@ var es_default = {
2463
2573
  "error.back-button": "Regresar",
2464
2574
  "error.description": "Ocurri\xF3 un error con el siguiente mensaje:",
2465
2575
  "error.support-email-link": "Si el problema persiste, por favor contacte a <a>{contactSupportEmail}</a>",
2466
- "error.title": "",
2467
2576
  "error.title-internal-server-error": "Error Interno del Servidor",
2468
2577
  "error.title-not-found": "404 - P\xE1gina no encontrada",
2469
2578
  "identities.messages.1010001": "Iniciar sesi\xF3n",
@@ -2638,45 +2747,6 @@ var es_default = {
2638
2747
  "two-step.totp.description": "Utilice un c\xF3digo de un solo uso de 6 d\xEDgitos de su aplicaci\xF3n de autenticaci\xF3n",
2639
2748
  "two-step.lookup_secret.title": "C\xF3digo de recuperaci\xF3n de respaldo",
2640
2749
  "two-step.lookup_secret.description": "Utilice uno de sus c\xF3digos de respaldo de 8 d\xEDgitos para autenticarse",
2641
- "identities.messages.1010016": "",
2642
- "identities.messages.1010017": "",
2643
- "identities.messages.1010018": "",
2644
- "identities.messages.1010019": "",
2645
- "identities.messages.1010020": "",
2646
- "identities.messages.1010021": "",
2647
- "identities.messages.1010022": "",
2648
- "identities.messages.1010023": "",
2649
- "identities.messages.1040007": "",
2650
- "identities.messages.1040008": "",
2651
- "identities.messages.1040009": "",
2652
- "identities.messages.1050019": "",
2653
- "identities.messages.1050020": "",
2654
- "identities.messages.1070014": "",
2655
- "identities.messages.1070015": "",
2656
- "identities.messages.4000037": "",
2657
- "identities.messages.4000038": "",
2658
- "identities.messages.4010009": "",
2659
- "identities.messages.4010010": "",
2660
- "login.cancel-button": "",
2661
- "login.cancel-label": "",
2662
- "input.placeholder": "",
2663
- "card.header.description.login": "",
2664
- "card.header.description.registration": "",
2665
- "card.header.parts.code": "",
2666
- "card.header.parts.identifier-first": "",
2667
- "card.header.parts.oidc": "",
2668
- "card.header.parts.passkey": "",
2669
- "card.header.parts.password.login": "",
2670
- "card.header.parts.password.registration": "",
2671
- "card.header.parts.webauthn": "",
2672
- "forms.label.forgot-password": "",
2673
- "login.subtitle": "",
2674
- "login.subtitle-refresh": "",
2675
- "misc.or": "",
2676
- "recovery.subtitle": "",
2677
- "registration.subtitle": "",
2678
- "settings.subtitle": "",
2679
- "verification.subtitle": "",
2680
2750
  "settings.totp.info.linked": "Actualmente tienes una aplicaci\xF3n de autenticaci\xF3n conectada.",
2681
2751
  "settings.totp.info.not-linked": "Para habilitar, escanea el c\xF3digo QR con tu autenticador e ingresa el c\xF3digo.",
2682
2752
  "settings.totp.title": "Aplicaci\xF3n Autenticadora",
@@ -2694,25 +2764,6 @@ var es_default = {
2694
2764
  "settings.profile.title": "Configuraci\xF3n de Perfil",
2695
2765
  "settings.webauthn.description": "Administra la configuraci\xF3n de tu token de hardware",
2696
2766
  "settings.webauthn.title": "Gestionar Tokens de Hardware",
2697
- "settings.oidc.info": "",
2698
- "settings.passkey.info": "",
2699
- "settings.title-lookup-secret": "",
2700
- "settings.title-navigation": "",
2701
- "settings.title-oidc": "",
2702
- "settings.title-passkey": "",
2703
- "settings.title-password": "",
2704
- "settings.title-profile": "",
2705
- "settings.title-totp": "",
2706
- "settings.title-webauthn": "",
2707
- "settings.webauthn.info": "",
2708
- "card.footer.select-another-method": "",
2709
- "account-linking.title": "",
2710
- "property.code": "",
2711
- "property.email": "",
2712
- "property.identifier": "",
2713
- "property.password": "",
2714
- "property.phone": "",
2715
- "property.username": "",
2716
2767
  "consent.title": "Autorizar {party}",
2717
2768
  "consent.subtitle": "Una aplicaci\xF3n de terceros quiere acceder a la informaci\xF3n asociada a su cuenta {identifier}.",
2718
2769
  "consent.scope.openid.title": "Identidad",
@@ -2727,12 +2778,71 @@ var es_default = {
2727
2778
  "consent.scope.address.description": "Acceda a su direcci\xF3n postal.",
2728
2779
  "consent.scope.phone.title": "N\xFAmero de tel\xE9fono",
2729
2780
  "consent.scope.phone.description": "Recupere su n\xFAmero de tel\xE9fono y su estado de verificaci\xF3n.",
2730
- "error.action.go-back": "",
2731
- "error.footer.copy": "",
2732
- "error.footer.text": "",
2733
- "error.instructions": "",
2734
- "error.title.what-can-i-do": "",
2735
- "error.title.what-happened": ""
2781
+ "error.title": "Ocurri\xF3 un error",
2782
+ "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.',
2783
+ "identities.messages.1010017": "Iniciar sesi\xF3n y vincular",
2784
+ "identities.messages.1010018": "Confirmar con {provider}",
2785
+ "identities.messages.1010019": "Solicitar c\xF3digo para continuar",
2786
+ "identities.messages.1010021": "Iniciar sesi\xF3n con clave de acceso",
2787
+ "identities.messages.1010022": "Iniciar sesi\xF3n con contrase\xF1a",
2788
+ "identities.messages.1010023": "Enviar c\xF3digo a {address}",
2789
+ "identities.messages.1040007": "Registrarse con clave de acceso",
2790
+ "identities.messages.1040008": "Atr\xE1s",
2791
+ "identities.messages.1040009": "Por favor, elige una credencial para autenticarte.",
2792
+ "identities.messages.1050019": "Agregar clave de acceso",
2793
+ "identities.messages.1070014": "Iniciar sesi\xF3n y vincular credencial",
2794
+ "identities.messages.1070015": "Por favor, completa el desaf\xEDo captcha para continuar.",
2795
+ "identities.messages.4000037": "Esta cuenta no existe o no tiene ning\xFAn m\xE9todo de inicio de sesi\xF3n configurado.",
2796
+ "identities.messages.4000038": "Fall\xF3 la verificaci\xF3n de Captcha, por favor intenta de nuevo.",
2797
+ "identities.messages.4010009": "Las credenciales vinculadas no coinciden.",
2798
+ "identities.messages.4010010": "La direcci\xF3n que ingresaste no coincide con ninguna direcci\xF3n conocida en la cuenta actual.",
2799
+ "login.cancel-button": "Cancelar",
2800
+ "login.cancel-label": "\xBFNo es la cuenta correcta?",
2801
+ "login.subtitle": "Iniciar sesi\xF3n con {parts}",
2802
+ "login.subtitle-refresh": "Confirma tu identidad con {parts}",
2803
+ "recovery.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para recibir un c\xF3digo de acceso \xFAnico",
2804
+ "registration.subtitle": "Registrarse con {parts}",
2805
+ "settings.subtitle": "Actualiza la configuraci\xF3n de tu cuenta",
2806
+ "settings.title-lookup-secret": "Administrar c\xF3digos de recuperaci\xF3n de respaldo 2FA",
2807
+ "settings.title-navigation": "Configuraci\xF3n de la cuenta",
2808
+ "settings.title-oidc": "Inicio de sesi\xF3n social",
2809
+ "settings.title-password": "Cambiar contrase\xF1a",
2810
+ "settings.title-profile": "Configuraci\xF3n del perfil",
2811
+ "settings.title-totp": "Administrar la aplicaci\xF3n de autenticaci\xF3n 2FA TOTP",
2812
+ "settings.title-webauthn": "Administrar tokens de hardware",
2813
+ "settings.title-passkey": "Administrar claves de acceso",
2814
+ "verification.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para verificarla",
2815
+ "input.placeholder": "Ingresa tu {placeholder}",
2816
+ "card.header.parts.oidc": "un proveedor social",
2817
+ "card.header.parts.password.registration": "tu {identifierLabel} y una contrase\xF1a",
2818
+ "card.header.parts.password.login": "tu {identifierLabel} y contrase\xF1a",
2819
+ "card.header.parts.code": "un c\xF3digo enviado a tu correo electr\xF3nico",
2820
+ "card.header.parts.passkey": "una clave de acceso",
2821
+ "card.header.parts.webauthn": "una clave de seguridad",
2822
+ "card.header.parts.identifier-first": "tu {identifierLabel}",
2823
+ "card.header.description.login": "Iniciar sesi\xF3n con {identifierLabel}",
2824
+ "card.header.description.registration": "Registrarse con {identifierLabel}",
2825
+ "misc.or": "o",
2826
+ "forms.label.forgot-password": "\xBFOlvidaste tu contrase\xF1a?",
2827
+ "settings.oidc.info": "Las cuentas conectadas de estos proveedores se pueden utilizar para iniciar sesi\xF3n en tu cuenta",
2828
+ "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",
2829
+ "settings.passkey.info": "Administra la configuraci\xF3n de tus claves de acceso",
2830
+ "card.footer.select-another-method": "Seleccionar otro m\xE9todo",
2831
+ "account-linking.title": "Vincular cuenta",
2832
+ "property.password": "contrase\xF1a",
2833
+ "property.email": "correo electr\xF3nico",
2834
+ "property.phone": "tel\xE9fono",
2835
+ "property.username": "nombre de usuario",
2836
+ "property.identifier": "identificador",
2837
+ "property.code": "c\xF3digo",
2838
+ "error.title.what-happened": "\xBFQu\xE9 pas\xF3?",
2839
+ "error.title.what-can-i-do": "\xBFQu\xE9 puedo hacer?",
2840
+ "error.instructions": "Por favor, int\xE9ntalo de nuevo en unos minutos o contacta al operador del sitio web.",
2841
+ "error.footer.text": "Al informar este error, incluye la siguiente informaci\xF3n:",
2842
+ "error.footer.copy": "Copiar",
2843
+ "error.action.go-back": "Regresar",
2844
+ "identities.messages.1010020": "",
2845
+ "identities.messages.1050020": 'Eliminar passkey "{display_name}"'
2736
2846
  };
2737
2847
 
2738
2848
  // src/locales/fr.json
@@ -2923,81 +3033,10 @@ var fr_default = {
2923
3033
  "two-step.totp.description": "Utilisez un code \xE0 usage unique \xE0 6 chiffres provenant de votre application d'authentification",
2924
3034
  "two-step.lookup_secret.title": "Code de r\xE9cup\xE9ration de secours",
2925
3035
  "two-step.lookup_secret.description": "Utilisez l'un de vos codes de secours \xE0 8 chiffres pour vous authentifier",
2926
- "identities.messages.1010023": "",
2927
- "identities.messages.1070015": "",
2928
- "identities.messages.4000038": "",
2929
- "login.cancel-button": "",
2930
- "login.cancel-label": "",
2931
- "identities.messages.1010016": "",
2932
- "identities.messages.1010017": "",
2933
- "identities.messages.1010018": "",
2934
- "identities.messages.1010019": "",
2935
- "identities.messages.1010020": "",
2936
- "identities.messages.1010021": "",
2937
- "identities.messages.1010022": "",
2938
- "identities.messages.1040007": "",
2939
- "identities.messages.1040008": "",
2940
- "identities.messages.1040009": "",
2941
- "identities.messages.1050019": "",
2942
- "identities.messages.1050020": "",
2943
- "identities.messages.1070014": "",
2944
- "identities.messages.4000037": "",
2945
- "identities.messages.4010009": "",
2946
- "identities.messages.4010010": "",
2947
- "input.placeholder": "",
2948
- "card.header.description.login": "",
2949
- "card.header.description.registration": "",
2950
- "card.header.parts.code": "",
2951
- "card.header.parts.identifier-first": "",
2952
- "card.header.parts.oidc": "",
2953
- "card.header.parts.passkey": "",
2954
- "card.header.parts.password.login": "",
2955
- "card.header.parts.password.registration": "",
2956
- "card.header.parts.webauthn": "",
2957
- "forms.label.forgot-password": "",
2958
- "login.subtitle": "",
2959
- "login.subtitle-refresh": "",
2960
- "misc.or": "",
2961
- "recovery.subtitle": "",
2962
- "registration.subtitle": "",
2963
- "settings.subtitle": "",
2964
- "verification.subtitle": "",
2965
3036
  "settings.totp.info.linked": "Vous avez actuellement une application d'authentification connect\xE9e.",
2966
3037
  "settings.totp.info.not-linked": "Pour activer, scannez le QR code avec votre authentificateur et entrez le code.",
2967
3038
  "settings.totp.title": "Application d'authentification",
2968
3039
  "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.",
2969
- "settings.lookup_secret.description": "",
2970
- "settings.lookup_secret.title": "",
2971
- "settings.navigation.title": "",
2972
- "settings.oidc.description": "",
2973
- "settings.oidc.info": "",
2974
- "settings.oidc.title": "",
2975
- "settings.passkey.description": "",
2976
- "settings.passkey.info": "",
2977
- "settings.passkey.title": "",
2978
- "settings.password.description": "",
2979
- "settings.password.title": "",
2980
- "settings.profile.description": "",
2981
- "settings.profile.title": "",
2982
- "settings.title-lookup-secret": "",
2983
- "settings.title-navigation": "",
2984
- "settings.title-oidc": "",
2985
- "settings.title-passkey": "",
2986
- "settings.title-password": "",
2987
- "settings.title-profile": "",
2988
- "settings.title-totp": "",
2989
- "settings.title-webauthn": "",
2990
- "settings.webauthn.description": "",
2991
- "settings.webauthn.info": "",
2992
- "settings.webauthn.title": "",
2993
- "card.footer.select-another-method": "",
2994
- "account-linking.title": "",
2995
- "property.code": "",
2996
- "property.email": "",
2997
- "property.identifier": "",
2998
- "property.password": "",
2999
- "property.phone": "",
3000
- "property.username": "",
3001
3040
  "consent.title": "Autoriser {party}",
3002
3041
  "consent.subtitle": "Une application tierce souhaite acc\xE9der aux informations associ\xE9es \xE0 votre compte {identifier}.",
3003
3042
  "consent.scope.openid.title": "Identit\xE9",
@@ -3012,12 +3051,83 @@ var fr_default = {
3012
3051
  "consent.scope.address.description": "Acc\xE8de \xE0 votre adresse postale.",
3013
3052
  "consent.scope.phone.title": "Num\xE9ro de t\xE9l\xE9phone",
3014
3053
  "consent.scope.phone.description": "R\xE9cup\xE8re votre num\xE9ro de t\xE9l\xE9phone et son statut de v\xE9rification.",
3015
- "error.action.go-back": "",
3016
- "error.footer.copy": "",
3017
- "error.footer.text": "",
3018
- "error.title.what-can-i-do": "",
3019
- "error.title.what-happened": "",
3020
- "error.instructions": ""
3054
+ "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.",
3055
+ "identities.messages.1010017": "Se connecter et lier",
3056
+ "identities.messages.1010018": "Confirmer avec {provider}",
3057
+ "identities.messages.1010019": "Demander un code pour continuer",
3058
+ "identities.messages.1010021": "Se connecter avec une cl\xE9 d'acc\xE8s",
3059
+ "identities.messages.1010022": "Se connecter avec un mot de passe",
3060
+ "identities.messages.1010023": "Envoyer le code \xE0 {address}",
3061
+ "identities.messages.1040007": "S'inscrire avec une cl\xE9 d'acc\xE8s",
3062
+ "identities.messages.1040008": "Retour",
3063
+ "identities.messages.1040009": "Veuillez choisir une identification pour vous authentifier.",
3064
+ "identities.messages.1050019": "Ajouter une cl\xE9 d'acc\xE8s",
3065
+ "identities.messages.1050020": "Supprimer la cl\xE9 d'acc\xE8s \xAB {display_name} \xBB",
3066
+ "identities.messages.1070014": "Se connecter et lier l'identification",
3067
+ "identities.messages.1070015": "Veuillez compl\xE9ter le d\xE9fi captcha pour continuer.",
3068
+ "identities.messages.4000037": "Ce compte n'existe pas ou n'a aucune m\xE9thode de connexion configur\xE9e.",
3069
+ "identities.messages.4000038": "La v\xE9rification Captcha a \xE9chou\xE9, veuillez r\xE9essayer.",
3070
+ "identities.messages.4010009": "Les identifications li\xE9es ne correspondent pas.",
3071
+ "identities.messages.4010010": "L'adresse que vous avez saisie ne correspond \xE0 aucune adresse connue dans le compte actuel.",
3072
+ "login.cancel-button": "Annuler",
3073
+ "login.cancel-label": "Ce n'est pas le bon compte\xA0?",
3074
+ "login.subtitle": "Se connecter avec {parts}",
3075
+ "login.subtitle-refresh": "Confirmez votre identit\xE9 avec {parts}",
3076
+ "recovery.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour recevoir un code d'acc\xE8s unique",
3077
+ "registration.subtitle": "S'inscrire avec {parts}",
3078
+ "settings.subtitle": "Mettre \xE0 jour les param\xE8tres de votre compte",
3079
+ "settings.title-lookup-secret": "G\xE9rer les codes de r\xE9cup\xE9ration de sauvegarde 2FA",
3080
+ "settings.title-navigation": "Param\xE8tres du compte",
3081
+ "settings.title-oidc": "Connexion via les r\xE9seaux sociaux",
3082
+ "settings.title-password": "Changer le mot de passe",
3083
+ "settings.title-profile": "Param\xE8tres du profil",
3084
+ "settings.title-totp": "G\xE9rer l'application d'authentification 2FA TOTP",
3085
+ "settings.title-webauthn": "G\xE9rer les jetons mat\xE9riels",
3086
+ "settings.title-passkey": "G\xE9rer les cl\xE9s d'acc\xE8s",
3087
+ "settings.navigation.title": "Param\xE8tres du compte",
3088
+ "settings.password.title": "Changer le mot de passe",
3089
+ "settings.password.description": "Modifier votre mot de passe",
3090
+ "settings.profile.title": "Param\xE8tres du profil",
3091
+ "settings.profile.description": "Mettre \xE0 jour les informations de votre profil",
3092
+ "settings.webauthn.title": "G\xE9rer les jetons mat\xE9riels",
3093
+ "settings.webauthn.description": "G\xE9rer les param\xE8tres de votre jeton mat\xE9riel",
3094
+ "verification.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour la v\xE9rifier",
3095
+ "input.placeholder": "Saisissez votre {placeholder}",
3096
+ "card.header.parts.oidc": "un fournisseur de r\xE9seaux sociaux",
3097
+ "card.header.parts.password.registration": "votre {identifierLabel} et un mot de passe",
3098
+ "card.header.parts.password.login": "votre {identifierLabel} et votre mot de passe",
3099
+ "card.header.parts.code": "un code envoy\xE9 \xE0 votre adresse e-mail",
3100
+ "card.header.parts.passkey": "une cl\xE9 d'acc\xE8s",
3101
+ "card.header.parts.webauthn": "une cl\xE9 de s\xE9curit\xE9",
3102
+ "card.header.parts.identifier-first": "votre {identifierLabel}",
3103
+ "card.header.description.login": "Se connecter avec {identifierLabel}",
3104
+ "card.header.description.registration": "S'inscrire avec {identifierLabel}",
3105
+ "misc.or": "ou",
3106
+ "forms.label.forgot-password": "Mot de passe oubli\xE9?",
3107
+ "settings.lookup_secret.title": "Codes de r\xE9cup\xE9ration de sauvegarde (second facteur)",
3108
+ "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.",
3109
+ "settings.oidc.title": "Comptes connect\xE9s",
3110
+ "settings.oidc.description": "Connectez un fournisseur de connexion sociale \xE0 votre compte.",
3111
+ "settings.oidc.info": "Les comptes connect\xE9s de ces fournisseurs peuvent \xEAtre utilis\xE9s pour vous connecter \xE0 votre compte",
3112
+ "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",
3113
+ "settings.passkey.title": "G\xE9rer les cl\xE9s d'acc\xE8s",
3114
+ "settings.passkey.description": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3115
+ "settings.passkey.info": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3116
+ "card.footer.select-another-method": "S\xE9lectionner une autre m\xE9thode",
3117
+ "account-linking.title": "Lier le compte",
3118
+ "property.password": "mot de passe",
3119
+ "property.email": "e-mail",
3120
+ "property.phone": "t\xE9l\xE9phone",
3121
+ "property.username": "nom d'utilisateur",
3122
+ "property.identifier": "identifiant",
3123
+ "property.code": "code",
3124
+ "error.title.what-happened": "Que s'est-il pass\xE9?",
3125
+ "error.title.what-can-i-do": "Que puis-je faire?",
3126
+ "error.instructions": "Veuillez r\xE9essayer dans quelques minutes ou contacter l'op\xE9rateur du site Web.",
3127
+ "error.footer.text": "Lorsque vous signalez cette erreur, veuillez inclure les informations suivantes:",
3128
+ "error.footer.copy": "Copier",
3129
+ "error.action.go-back": "Retour",
3130
+ "identities.messages.1010020": ""
3021
3131
  };
3022
3132
 
3023
3133
  // src/locales/nl.json