@ory/elements-react 1.0.0-pr.5494d7c2 → 1.0.0-pr.6c5e72b6

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/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ ## 1.0.0-rc.5 (2025-05-16)
2
+
3
+ ### 🩹 Fixes
4
+
5
+ - properly detect OIDC account linking ([#538](https://github.com/ory/elements/pull/538))
6
+
7
+ ### ❤️ Thank You
8
+
9
+ - Jonas Hungershausen
10
+
11
+ ## 1.0.0-rc.4 (2025-05-15)
12
+
13
+ ### 🩹 Fixes
14
+
15
+ - properly handle missing fields in OIDC registration ([#534](https://github.com/ory/elements/pull/534))
16
+ - incorrect if branching in handle error ([#533](https://github.com/ory/elements/pull/533))
17
+ - re-enable method chooser on mfa method active screens ([#530](https://github.com/ory/elements/pull/530))
18
+
19
+ ### ❤️ Thank You
20
+
21
+ - hackerman @aeneasr
22
+ - Jonas Hungershausen
23
+
1
24
  ## 1.0.0-rc.3 (2025-05-09)
2
25
 
3
26
  ### 🩹 Fixes
package/DEVELOPMENT.md CHANGED
@@ -73,7 +73,8 @@ Usage:
73
73
  ```bash
74
74
  ./scripts/release.sh <project> <tag>
75
75
 
76
- ./scripts/release.sh @ory/elements-react next
76
+ ./scripts/release.sh @ory/elements-react next # next release preview (-next.X)
77
+ ./scripts/release.sh @ory/elements-react rc # release candidate (-rc.X)
77
78
  ```
78
79
 
79
80
  The script asks the user before executing each steps. Please double check
package/dist/index.js CHANGED
@@ -272,12 +272,25 @@ function useNodeGroupsWithVisibleNodes(nodes) {
272
272
  }
273
273
 
274
274
  // src/components/card/two-step/utils.ts
275
+ function isScreenSelectionNode(node) {
276
+ if ("name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous") {
277
+ return true;
278
+ }
279
+ if (node.group === clientFetch.UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden") {
280
+ return true;
281
+ }
282
+ return false;
283
+ }
275
284
  function isChoosingMethod(flow) {
276
- return flow.flow.ui.nodes.some(
277
- (node) => "name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous"
278
- ) || flow.flow.ui.nodes.some(
279
- (node) => node.group === clientFetch.UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
280
- ) || flow.flowType === clientFetch.FlowType.Login && flow.flow.requested_aal === "aal2";
285
+ if (flow.flowType === clientFetch.FlowType.Login) {
286
+ if (flow.flow.requested_aal === "aal2") {
287
+ return true;
288
+ }
289
+ if (flow.flow.refresh) {
290
+ return true;
291
+ }
292
+ }
293
+ return flow.flow.ui.nodes.some(isScreenSelectionNode);
281
294
  }
282
295
  function getFinalNodes(uniqueGroups, selectedGroup) {
283
296
  var _a, _b, _c, _d;
@@ -322,16 +335,16 @@ function parseStateFromFlow(flow) {
322
335
  return { current: "method_active", method: "code" };
323
336
  } else if (methodWithMessage) {
324
337
  return { current: "method_active", method: methodWithMessage.group };
338
+ } else if ((_a = flow.flow.ui.messages) == null ? void 0 : _a.some((m) => m.id === 1010016)) {
339
+ return { current: "select_method" };
325
340
  } else if (flow.flow.active && !["default", "identifier_first"].includes(flow.flow.active)) {
326
341
  return { current: "method_active", method: flow.flow.active };
327
342
  } else if (isChoosingMethod(flow)) {
328
343
  const authMethods = nodesToAuthMethodGroups(flow.flow.ui.nodes);
329
- if (authMethods.length === 1 && authMethods[0] !== "code") {
344
+ if (authMethods.length === 1 && !["code", "passkey"].includes(authMethods[0])) {
330
345
  return { current: "method_active", method: authMethods[0] };
331
346
  }
332
347
  return { current: "select_method" };
333
- } else if ((_a = flow.flow.ui.messages) == null ? void 0 : _a.some((m) => m.id === 1010016)) {
334
- return { current: "select_method" };
335
348
  }
336
349
  return { current: "provide_identifier" };
337
350
  }
@@ -682,6 +695,134 @@ function replaceWindowFlowId(flow) {
682
695
  url.searchParams.set("flow", flow);
683
696
  window.location.href = url.toString();
684
697
  }
698
+ function isGenericErrorResponse(response) {
699
+ return typeof response === "object" && !!response && "error" in response && typeof response.error === "object" && !!response.error && "id" in response.error;
700
+ }
701
+ function isNeedsPrivilegedSessionError(response) {
702
+ return isGenericErrorResponse(response) && response.error.id === "session_refresh_required";
703
+ }
704
+ function isSelfServiceFlowExpiredError(response) {
705
+ return isGenericErrorResponse(response) && response.error.id === "self_service_flow_expired";
706
+ }
707
+ function isBrowserLocationChangeRequired(response) {
708
+ return isGenericErrorResponse(response) && isGenericErrorResponse(response) && response.error.id === "browser_location_change_required";
709
+ }
710
+ function isAddressNotVerified(response) {
711
+ return isGenericErrorResponse(response) && response.error.id === "session_verified_address_required";
712
+ }
713
+ function isCsrfError(response) {
714
+ return isGenericErrorResponse(response) && response.error.id === "security_csrf_violation";
715
+ }
716
+ var isResponseError = (err) => {
717
+ if (err instanceof clientFetch.ResponseError) {
718
+ return true;
719
+ }
720
+ return typeof err === "object" && !!err && "name" in err && err.name === "ResponseError";
721
+ };
722
+ var isFetchError = (err) => {
723
+ return err instanceof clientFetch.FetchError;
724
+ };
725
+
726
+ // src/util/sdk-helpers/urlHelpers.ts
727
+ var verificationUrl = (config) => config.sdk.url + "/self-service/verification/browser";
728
+ var handleFlowError = (opts) => async (err) => {
729
+ var _a;
730
+ if (!isResponseError(err)) {
731
+ if (isFetchError(err)) {
732
+ throw new clientFetch.FetchError(
733
+ err,
734
+ "Unable to call the API endpoint. Ensure that CORS is set up correctly and that you have provided a valid SDK URL to Ory Elements."
735
+ );
736
+ }
737
+ throw err;
738
+ }
739
+ const contentType = err.response.headers.get("content-type") || "";
740
+ if (contentType.includes("application/json")) {
741
+ const body = await toBody(err.response);
742
+ if (isSelfServiceFlowExpiredError(body)) {
743
+ opts.onRestartFlow(body.use_flow_id);
744
+ return;
745
+ } else if (isAddressNotVerified(body)) {
746
+ for (const continueWith of ((_a = body.error.details) == null ? void 0 : _a.continue_with) || []) {
747
+ if (continueWith.action === "show_verification_ui" && continueWith.flow.url) {
748
+ opts.onRedirect(continueWith.flow.url, true);
749
+ return;
750
+ }
751
+ }
752
+ opts.onRedirect(verificationUrl(opts.config), true);
753
+ return;
754
+ } else if (isBrowserLocationChangeRequired(body) && body.redirect_browser_to) {
755
+ opts.onRedirect(body.redirect_browser_to, true);
756
+ return;
757
+ } else if (isNeedsPrivilegedSessionError(body) && body.redirect_browser_to) {
758
+ opts.onRedirect(body.redirect_browser_to, true);
759
+ return;
760
+ } else if (isCsrfError(body)) {
761
+ opts.onRestartFlow();
762
+ return;
763
+ }
764
+ switch (err.response.status) {
765
+ case 404:
766
+ opts.onRestartFlow();
767
+ return;
768
+ case 410:
769
+ opts.onRestartFlow();
770
+ return;
771
+ case 400:
772
+ return opts.onValidationError(
773
+ await err.response.json()
774
+ );
775
+ case 403:
776
+ opts.onRestartFlow();
777
+ return;
778
+ case 422: {
779
+ throw new clientFetch.ResponseError(
780
+ err.response,
781
+ "The API returned an error code indicating a required redirect, but the SDK is outdated and does not know how to handle the action. Received response: " + await err.response.json()
782
+ );
783
+ }
784
+ }
785
+ throw new clientFetch.ResponseError(
786
+ err.response,
787
+ "The Ory API endpoint returned a response code the SDK does not know how to handle. Please check the network tab for more information. Received response: " + await err.response.json()
788
+ );
789
+ } else if (
790
+ // Not a JSON response? If it's a text response we will return an error informing the user that the response is not JSON.
791
+ contentType.includes("text/") || contentType.includes("html") || contentType.includes("xml")
792
+ ) {
793
+ await logResponseError(err.response, true);
794
+ throw new clientFetch.ResponseError(
795
+ err.response,
796
+ `The Ory API endpoint returned an unexpected HTML or text response. Check your console output for details.`
797
+ );
798
+ }
799
+ await logResponseError(err.response, false);
800
+ throw new clientFetch.ResponseError(
801
+ err.response,
802
+ "The Ory API endpoint returned unexpected content type `" + contentType + "`. Check your console output for details."
803
+ );
804
+ };
805
+ async function toBody(response) {
806
+ try {
807
+ return await response.clone().json();
808
+ } catch (e) {
809
+ await logResponseError(response, true, [e]);
810
+ throw new clientFetch.ResponseError(
811
+ response,
812
+ "Unable to decode API response using JSON."
813
+ );
814
+ }
815
+ }
816
+ async function logResponseError(response, printBody, wrap) {
817
+ console.error("Unable to decode API response", {
818
+ response: {
819
+ status: response.status,
820
+ headers: Object.fromEntries(response.headers.entries()),
821
+ body: printBody ? await response.clone().text() : void 0
822
+ },
823
+ errors: wrap
824
+ });
825
+ }
685
826
 
686
827
  // src/util/onSubmitLogin.ts
687
828
  async function onSubmitLogin({ flow }, config, {
@@ -703,7 +844,7 @@ async function onSubmitLogin({ flow }, config, {
703
844
  window.location.href = // eslint-disable-next-line promise/always-return
704
845
  (_a2 = flow.return_to) != null ? _a2 : config.sdk.url + "/self-service/login/browser";
705
846
  }).catch(
706
- clientFetch.handleFlowError({
847
+ handleFlowError({
707
848
  onRestartFlow: (useFlowId) => {
708
849
  if (useFlowId) {
709
850
  replaceWindowFlowId(useFlowId);
@@ -717,7 +858,8 @@ async function onSubmitLogin({ flow }, config, {
717
858
  flowType: clientFetch.FlowType.Login
718
859
  });
719
860
  },
720
- onRedirect
861
+ onRedirect,
862
+ config
721
863
  })
722
864
  );
723
865
  }
@@ -742,7 +884,7 @@ async function onSubmitRecovery({ flow }, config, {
742
884
  flowType: clientFetch.FlowType.Recovery
743
885
  });
744
886
  }).catch(
745
- clientFetch.handleFlowError({
887
+ handleFlowError({
746
888
  onRestartFlow: (useFlowId) => {
747
889
  if (useFlowId) {
748
890
  replaceWindowFlowId(useFlowId);
@@ -761,7 +903,8 @@ async function onSubmitRecovery({ flow }, config, {
761
903
  });
762
904
  }
763
905
  },
764
- onRedirect
906
+ onRedirect,
907
+ config
765
908
  })
766
909
  );
767
910
  }
@@ -796,7 +939,7 @@ async function onSubmitRegistration({ flow }, config, {
796
939
  }
797
940
  onRedirect(clientFetch.registrationUrl(config), true);
798
941
  }).catch(
799
- clientFetch.handleFlowError({
942
+ handleFlowError({
800
943
  onRestartFlow: (useFlowId) => {
801
944
  if (useFlowId) {
802
945
  replaceWindowFlowId(useFlowId);
@@ -810,7 +953,8 @@ async function onSubmitRegistration({ flow }, config, {
810
953
  flowType: clientFetch.FlowType.Registration
811
954
  });
812
955
  },
813
- onRedirect
956
+ onRedirect,
957
+ config
814
958
  })
815
959
  );
816
960
  }
@@ -835,7 +979,7 @@ async function onSubmitSettings({ flow }, config, {
835
979
  flowType: clientFetch.FlowType.Settings
836
980
  });
837
981
  }).catch(
838
- clientFetch.handleFlowError({
982
+ handleFlowError({
839
983
  onRestartFlow: (useFlowId) => {
840
984
  if (useFlowId) {
841
985
  replaceWindowFlowId(useFlowId);
@@ -849,7 +993,8 @@ async function onSubmitSettings({ flow }, config, {
849
993
  flowType: clientFetch.FlowType.Settings
850
994
  });
851
995
  },
852
- onRedirect
996
+ onRedirect,
997
+ config
853
998
  })
854
999
  ).catch((err) => {
855
1000
  if (clientFetch.isResponseError(err)) {
@@ -877,7 +1022,7 @@ async function onSubmitVerification({ flow }, config, {
877
1022
  flowType: clientFetch.FlowType.Verification
878
1023
  })
879
1024
  ).catch(
880
- clientFetch.handleFlowError({
1025
+ handleFlowError({
881
1026
  onRestartFlow: (useFlowId) => {
882
1027
  if (useFlowId) {
883
1028
  replaceWindowFlowId(useFlowId);
@@ -891,7 +1036,8 @@ async function onSubmitVerification({ flow }, config, {
891
1036
  flowType: clientFetch.FlowType.Verification
892
1037
  });
893
1038
  },
894
- onRedirect
1039
+ onRedirect,
1040
+ config
895
1041
  })
896
1042
  );
897
1043
  }
@@ -1073,7 +1219,8 @@ var messageIdsToHide = [
1073
1219
  1010004,
1074
1220
  1010014,
1075
1221
  1040005,
1076
- 1010016
1222
+ 1010016,
1223
+ 1010003
1077
1224
  ];
1078
1225
  function OryCardValidationMessages({ ...props }) {
1079
1226
  var _a;
@@ -1104,9 +1251,9 @@ var NodeInput = ({
1104
1251
  ...attrs
1105
1252
  } = attributes;
1106
1253
  const isResendNode = ((_a = node.meta.label) == null ? void 0 : _a.id) === 1070008;
1107
- const isScreenSelectionNode = "name" in node.attributes && node.attributes.name === "screen";
1254
+ const isScreenSelectionNode2 = "name" in node.attributes && node.attributes.name === "screen";
1108
1255
  const setFormValue = () => {
1109
- if (attrs.value && !(isResendNode || isScreenSelectionNode || node.group === clientFetch.UiNodeGroupEnum.Oauth2Consent)) {
1256
+ if (attrs.value && !(isResendNode || isScreenSelectionNode2 || node.group === clientFetch.UiNodeGroupEnum.Oauth2Consent)) {
1110
1257
  setValue(attrs.name, attrs.value);
1111
1258
  }
1112
1259
  };
@@ -1163,7 +1310,7 @@ var NodeInput = ({
1163
1310
  }
1164
1311
  );
1165
1312
  }
1166
- if (isResendNode || isScreenSelectionNode) {
1313
+ if (isResendNode || isScreenSelectionNode2) {
1167
1314
  return null;
1168
1315
  }
1169
1316
  if (node.group === "oauth2_consent") {
@@ -1245,7 +1392,8 @@ var Node = ({ node, onClick }) => {
1245
1392
  {
1246
1393
  crossOrigin: crossorigin,
1247
1394
  referrerPolicy: referrerpolicy,
1248
- ...attributes
1395
+ ...attributes,
1396
+ integrity: ""
1249
1397
  }
1250
1398
  );
1251
1399
  }
@@ -1403,15 +1551,17 @@ function toAuthMethodPickerOptions(visibleGroups) {
1403
1551
  }
1404
1552
  function OryTwoStepCardStateSelectMethod() {
1405
1553
  var _a, _b, _c, _d;
1406
- const { Form, Card, Message } = useComponents();
1554
+ const { Form, Card } = useComponents();
1407
1555
  const { flow, flowType, dispatchFormState } = useOryFlow();
1408
1556
  const { ui } = flow;
1409
- const intl = reactIntl.useIntl();
1410
1557
  const nodeSorter = useNodeSorter();
1411
1558
  const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1412
1559
  const visibleGroups = useNodeGroupsWithVisibleNodes(ui.nodes);
1413
1560
  const authMethodBlocks = toAuthMethodPickerOptions(visibleGroups);
1414
1561
  const authMethodAdditionalNodes = useFunctionalNodes(ui.nodes);
1562
+ const hiddenNodes = ui.nodes.filter(
1563
+ (n) => n.attributes.node_type === "input" && n.attributes.type === "hidden" || clientFetch.isUiNodeScriptAttributes(n.attributes)
1564
+ );
1415
1565
  if (clientFetch.UiNodeGroupEnum.Code in authMethodBlocks) {
1416
1566
  let identifier = (_b = (_a = findNode(ui.nodes, {
1417
1567
  group: "identifier_first",
@@ -1432,44 +1582,52 @@ function OryTwoStepCardStateSelectMethod() {
1432
1582
  };
1433
1583
  }
1434
1584
  }
1435
- const noMethods = {
1436
- id: 5000002,
1437
- text: intl.formatMessage({
1438
- id: `identities.messages.5000002`,
1439
- defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
1440
- }),
1441
- type: "error"
1442
- };
1443
1585
  return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1444
1586
  /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1445
1587
  /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1446
1588
  /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1447
1589
  /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1448
- Object.entries(authMethodBlocks).length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
1590
+ Object.entries(authMethodBlocks).length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
1449
1591
  OryForm,
1450
1592
  {
1451
1593
  "data-testid": `ory/form/methods/local`,
1452
1594
  onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
1453
- children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1454
- /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1455
- /* @__PURE__ */ jsxRuntime.jsx(
1456
- AuthMethodList,
1457
- {
1458
- options: authMethodBlocks,
1459
- setSelectedGroup: (group) => dispatchFormState({
1460
- type: "action_select_method",
1461
- method: group
1462
- })
1463
- }
1464
- ),
1465
- authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1466
- ] })
1595
+ children: [
1596
+ /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1597
+ /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1598
+ /* @__PURE__ */ jsxRuntime.jsx(
1599
+ AuthMethodList,
1600
+ {
1601
+ options: authMethodBlocks,
1602
+ setSelectedGroup: (group) => dispatchFormState({
1603
+ type: "action_select_method",
1604
+ method: group
1605
+ })
1606
+ }
1607
+ ),
1608
+ authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1609
+ ] }),
1610
+ hiddenNodes.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1611
+ ]
1467
1612
  }
1468
- ) : !hasSingleSignOnNodes(ui.nodes) && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": `ory/form/methods/local`, children: /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: noMethods }, noMethods.id) }) })
1613
+ ) : !hasSingleSignOnNodes(ui.nodes) && /* @__PURE__ */ jsxRuntime.jsx(NoMethodsMessage, {})
1469
1614
  ] }),
1470
1615
  /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1471
1616
  ] });
1472
1617
  }
1618
+ function NoMethodsMessage() {
1619
+ const intl = reactIntl.useIntl();
1620
+ const { Message } = useComponents();
1621
+ const noMethods = {
1622
+ id: 5000002,
1623
+ text: intl.formatMessage({
1624
+ id: `identities.messages.5000002`,
1625
+ defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
1626
+ }),
1627
+ type: "error"
1628
+ };
1629
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": `ory/form/methods/local`, children: /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: noMethods }, noMethods.id) }) });
1630
+ }
1473
1631
  function OryTwoStepCard() {
1474
1632
  const { formState } = useOryFlow();
1475
1633
  switch (formState.current) {
@@ -2300,6 +2458,7 @@ var en_default = {
2300
2458
  "two-step.webauthn.description": "Use your security key to authenticate",
2301
2459
  "two-step.passkey.title": "Passkey (recommended)",
2302
2460
  "two-step.passkey.description": "Use your device's for fingerprint or face recognition",
2461
+ "two-step.passkey.description.error": "Could not load the necessary libraries to use your Passkey. Please try again later.",
2303
2462
  "two-step.totp.title": "Use your Authenticator App (TOTP)",
2304
2463
  "two-step.totp.description": "Use a 6-digit one-time code from your authenticator app",
2305
2464
  "two-step.lookup_secret.title": "Backup recovery code",
@@ -2525,12 +2684,13 @@ var de_default = {
2525
2684
  "registration.title": "Konto registrieren",
2526
2685
  "verification.registration-button": "Registrieren",
2527
2686
  "verification.registration-label": "Sie haben noch kein Konto?",
2528
- "verification.title": "Verifizieren Sie ihr Konto",
2687
+ "verification.title": "Verifizieren Sie Ihr Konto",
2529
2688
  "verification.back-button": "Zur\xFCck",
2530
2689
  "two-step.code.description": "Ein Best\xE4tigungscode wird an Ihre E-Mail gesendet.",
2531
2690
  "two-step.code.title": "E-Mail-Code",
2532
- "two-step.passkey.description": "Verwenden Sie die Fingerabdruck- oder Gesichtserkennung Ihres Ger\xE4ts",
2533
2691
  "two-step.passkey.title": "Passkey (empfohlen)",
2692
+ "two-step.passkey.description": "Verwenden Sie die Fingerabdruck- oder Gesichtserkennung Ihres Ger\xE4ts",
2693
+ "two-step.passkey.description.error": "Konnte die erforderlichen Bibliotheken f\xFCr Passkeys nicht laden. Bitte versuchen Sie es sp\xE4ter erneut.",
2534
2694
  "two-step.password.description": "Geben Sie Ihr Passwort ein, das mit Ihrem Konto verkn\xFCpft ist",
2535
2695
  "two-step.password.title": "Passwort",
2536
2696
  "two-step.webauthn.title": "Sicherheitsschl\xFCssel",
@@ -2568,14 +2728,14 @@ var de_default = {
2568
2728
  "card.header.parts.password.login": "Ihrer {identifierLabel} und Ihrem Passwort",
2569
2729
  "card.header.parts.password.registration": "Ihrer {identifierLabel} und einem Passwort",
2570
2730
  "card.header.parts.webauthn": "ein Sicherheitsschl\xFCssel",
2571
- "card.header.parts.totp": "deine Authentifikator-App",
2731
+ "card.header.parts.totp": "Ihre Authentifikator-App",
2572
2732
  "card.header.parts.lookup_secret": "ein Backup-Wiederherstellungscode",
2573
2733
  "recovery.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um einen einmaligen Zugangscode zu erhalten",
2574
2734
  "verification.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um es zu best\xE4tigen",
2575
2735
  "card.header.description.login": "Melden Sie sich mit {identifierLabel} an",
2576
2736
  "card.header.description.registration": "Registrieren Sie sich mit {identifierLabel}",
2577
2737
  "login.subtitle": "Melden Sie sich mit {parts} an",
2578
- "login.subtitle-refresh": "Best\xE4tigen Sie ihre Identit\xE4t mit {parts}",
2738
+ "login.subtitle-refresh": "Best\xE4tigen Sie Ihre Identit\xE4t mit {parts}",
2579
2739
  "misc.or": "oder",
2580
2740
  "registration.subtitle": "Registrieren Sie sich mit {parts}",
2581
2741
  "forms.label.forgot-password": "Passwort vergessen?",
@@ -2828,6 +2988,7 @@ var es_default = {
2828
2988
  "two-step.code.title": "C\xF3digo de correo electr\xF3nico",
2829
2989
  "two-step.passkey.description": "Utiliza el reconocimiento de huellas dactilares o facial de tu dispositivo.",
2830
2990
  "two-step.passkey.title": "Clave de acceso (recomendada)",
2991
+ "two-step.passkey.description.error": "No se pudieron cargar las bibliotecas necesarias para usar su Passkey. Por favor, int\xE9ntelo de nuevo m\xE1s tarde",
2831
2992
  "two-step.password.description": "Ingrese la contrase\xF1a asociada con su cuenta",
2832
2993
  "two-step.password.title": "Contrase\xF1a",
2833
2994
  "two-step.webauthn.title": "Clave de Seguridad",
@@ -3116,6 +3277,7 @@ var fr_default = {
3116
3277
  "two-step.code.title": "Code de courrier \xE9lectronique",
3117
3278
  "two-step.passkey.description": "Utilisez l'appareil pour la reconnaissance d'empreintes digitales ou de visage",
3118
3279
  "two-step.passkey.title": "Cl\xE9 de passe (recommand\xE9e)",
3280
+ "two-step.passkey.description.error": "Impossible de charger les biblioth\xE8ques n\xE9cessaires pour utiliser votre Passkey. Veuillez r\xE9essayer plus tard.",
3119
3281
  "two-step.password.description": "Entrez votre mot de passe associ\xE9 \xE0 votre compte",
3120
3282
  "two-step.password.title": "Mot de passe",
3121
3283
  "two-step.webauthn.title": "Cl\xE9 de S\xE9curit\xE9",
@@ -3402,6 +3564,7 @@ var nl_default = {
3402
3564
  "two-step.code.description": "Een verificatiecode wordt naar uw e-mail gestuurd",
3403
3565
  "two-step.code.title": "E-mailcode",
3404
3566
  "two-step.passkey.description": "Gebruik de vingerafdruk- of gezichtsherkenning van uw apparaat",
3567
+ "two-step.passkey.description.error": "De benodigde bibliotheken om uw Passkey te gebruiken konden niet worden geladen. Probeer het later opnieuw.",
3405
3568
  "two-step.passkey.title": "Toegangscode (aanbevolen)",
3406
3569
  "two-step.password.description": "Voer uw wachtwoord in dat is gekoppeld aan uw account",
3407
3570
  "two-step.password.title": "Wachtwoord",
@@ -3689,6 +3852,7 @@ var pl_default = {
3689
3852
  "two-step.code.description": "Kod weryfikacyjny zostanie wys\u0142any na Tw\xF3j adres email.",
3690
3853
  "two-step.code.title": "Kod email",
3691
3854
  "two-step.passkey.description": "U\u017Cyj swojego urz\u0105dzenia lub funkcji rozpoznawania twarzy na swoim urz\u0105dzeniu.",
3855
+ "two-step.passkey.description.error": "Nie uda\u0142o si\u0119 za\u0142adowa\u0107 niezb\u0119dnych bibliotek do u\u017Cycia Passkey. Spr\xF3buj ponownie p\xF3\u017Aniej.",
3692
3856
  "two-step.passkey.title": "Klucz dost\u0119pu (zalecany)",
3693
3857
  "two-step.password.description": "Wprowad\u017A has\u0142o powi\u0105zane z twoim kontem",
3694
3858
  "two-step.password.title": "Has\u0142o",
@@ -3976,6 +4140,7 @@ var pt_default = {
3976
4140
  "two-step.code.description": "Um c\xF3digo de verifica\xE7\xE3o ser\xE1 enviado para o seu email",
3977
4141
  "two-step.code.title": "C\xF3digo de email",
3978
4142
  "two-step.passkey.description": "Use o seu dispositivo para reconhecimento de impress\xE3o digital ou facial.",
4143
+ "two-step.passkey.description.error": "N\xE3o foi poss\xEDvel carregar as bibliotecas necess\xE1rias para usar o seu Passkey. Por favor, tente novamente mais tarde.",
3979
4144
  "two-step.passkey.title": "Chave de acesso (recomendado)",
3980
4145
  "two-step.password.description": "Insira a sua senha associada \xE0 sua conta",
3981
4146
  "two-step.password.title": "Senha",
@@ -4282,6 +4447,7 @@ var sv_default = {
4282
4447
  "two-step.code.title": "E-postkod",
4283
4448
  "two-step.passkey.description": "Anv\xE4nd din enhets fingeravtryck eller ansiktsigenk\xE4nning",
4284
4449
  "two-step.passkey.title": "Passerkod (rekommenderad)",
4450
+ "two-step.passkey.description.error": "Det gick inte att ladda de n\xF6dv\xE4ndiga biblioteken f\xF6r att anv\xE4nda din Passkey. F\xF6rs\xF6k igen senare.",
4285
4451
  "two-step.password.description": "Ange ditt l\xF6senord kopplat till ditt konto",
4286
4452
  "two-step.password.title": "L\xF6senord",
4287
4453
  "two-step.webauthn.title": "S\xE4kerhetsnyckel",