@ory/elements-react 0.0.0-pr.2c76cc9 → 0.0.0-pr.2e82b68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -189,26 +189,32 @@ function nodesToAuthMethodGroups(nodes, excludeAuthMethods = []) {
189
189
  ].includes(group)
190
190
  );
191
191
  }
192
- function useNodesGroups(nodes) {
192
+ function useNodesGroups(nodes, { omit } = {}) {
193
193
  const groupSorter = useGroupSorter();
194
194
  const groups = react.useMemo(() => {
195
- var _a;
195
+ var _a, _b;
196
196
  const groups2 = {};
197
+ const groupRetained = {};
197
198
  for (const node of nodes) {
198
- if (clientFetch.isUiNodeScriptAttributes(node.attributes)) {
199
- continue;
200
- }
201
- if (clientFetch.isUiNodeInputAttributes(node.attributes)) {
202
- if (node.attributes.type === "hidden") {
203
- continue;
204
- }
205
- }
206
199
  const groupNodes = (_a = groups2[node.group]) != null ? _a : [];
207
200
  groupNodes.push(node);
208
201
  groups2[node.group] = groupNodes;
202
+ if ((omit == null ? void 0 : omit.includes("script")) && clientFetch.isUiNodeScriptAttributes(node.attributes)) {
203
+ continue;
204
+ }
205
+ if ((omit == null ? void 0 : omit.includes("input_hidden")) && clientFetch.isUiNodeInputAttributes(node.attributes) && node.attributes.type === "hidden") {
206
+ continue;
207
+ }
208
+ groupRetained[node.group] = ((_b = groupRetained[node.group]) != null ? _b : 0) + 1;
209
+ }
210
+ const finalGroups = {};
211
+ for (const [group, count] of Object.entries(groupRetained)) {
212
+ if (count > 0) {
213
+ finalGroups[group] = groups2[group];
214
+ }
209
215
  }
210
- return groups2;
211
- }, [nodes]);
216
+ return finalGroups;
217
+ }, [nodes, omit]);
212
218
  const entries = react.useMemo(
213
219
  () => Object.entries(groups).sort(([a], [b]) => groupSorter(a, b)),
214
220
  [groups, groupSorter]
@@ -875,7 +881,11 @@ function useOryFormSubmit(onAfterSubmit) {
875
881
  };
876
882
  return onSubmit;
877
883
  }
878
- function OryForm({ children, onAfterSubmit }) {
884
+ function OryForm({
885
+ children,
886
+ onAfterSubmit,
887
+ "data-testid": dataTestId
888
+ }) {
879
889
  const { Form } = useComponents();
880
890
  const flowContainer = useOryFlow();
881
891
  const methods = reactHookForm.useFormContext();
@@ -884,6 +894,9 @@ function OryForm({ children, onAfterSubmit }) {
884
894
  const onSubmit = useOryFormSubmit(onAfterSubmit);
885
895
  const hasMethods = flowContainer.flow.ui.nodes.some((node) => {
886
896
  if (clientFetch.isUiNodeInputAttributes(node.attributes)) {
897
+ if (node.attributes.type === "hidden") {
898
+ return false;
899
+ }
887
900
  return node.attributes.name !== "csrf_token";
888
901
  } else if (clientFetch.isUiNodeAnchorAttributes(node.attributes)) {
889
902
  return true;
@@ -903,10 +916,7 @@ function OryForm({ children, onAfterSubmit }) {
903
916
  }),
904
917
  type: "error"
905
918
  };
906
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
907
- /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: m }, m.id) }),
908
- /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
909
- ] });
919
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": dataTestId, children: /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: m }, m.id) }) });
910
920
  }
911
921
  if (flowContainer.flowType === clientFetch.FlowType.Login && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
912
922
  methods.setValue("method", "code");
@@ -914,6 +924,7 @@ function OryForm({ children, onAfterSubmit }) {
914
924
  return /* @__PURE__ */ jsxRuntime.jsx(
915
925
  Form.Root,
916
926
  {
927
+ "data-testid": dataTestId,
917
928
  action: flowContainer.flow.ui.action,
918
929
  method: flowContainer.flow.ui.method,
919
930
  onSubmit: (e) => void methods.handleSubmit(onSubmit)(e),
@@ -961,10 +972,7 @@ var NodeInput = ({
961
972
  const isResendNode = ((_a = node.meta.label) == null ? void 0 : _a.id) === 1070008;
962
973
  const isScreenSelectionNode = "name" in node.attributes && node.attributes.name === "screen";
963
974
  const setFormValue = () => {
964
- if (isResendNode || isScreenSelectionNode || node.group === clientFetch.UiNodeGroupEnum.Oauth2Consent) {
965
- return;
966
- }
967
- if (attrs.value !== void 0) {
975
+ if (attrs.value && !(isResendNode || isScreenSelectionNode || node.group === clientFetch.UiNodeGroupEnum.Oauth2Consent)) {
968
976
  setValue(attrs.name, attrs.value);
969
977
  }
970
978
  };
@@ -1134,23 +1142,27 @@ function OryFormSocialButtonsForm() {
1134
1142
  if (filteredNodes.length === 0) {
1135
1143
  return null;
1136
1144
  }
1137
- return /* @__PURE__ */ jsxRuntime.jsx(OryFormProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(OryForm, { children: /* @__PURE__ */ jsxRuntime.jsx(OryFormOidcButtons, {}) }) });
1145
+ return /* @__PURE__ */ jsxRuntime.jsx(OryFormProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(OryForm, { "data-testid": `ory/form/methods/oidc-saml`, children: /* @__PURE__ */ jsxRuntime.jsx(OryFormOidcButtons, {}) }) });
1138
1146
  }
1139
1147
  function isUINodeGroupEnum(method) {
1140
1148
  return Object.values(clientFetch.UiNodeGroupEnum).includes(method);
1141
1149
  }
1142
1150
  function OryTwoStepCard() {
1143
1151
  var _a, _b, _c, _d;
1144
- const { Form, Card } = useComponents();
1152
+ const { Form, Card, Message } = useComponents();
1145
1153
  const { flow, flowType, formState, dispatchFormState } = useOryFlow();
1146
1154
  const { ui } = flow;
1155
+ const intl = reactIntl.useIntl();
1147
1156
  const nodeSorter = useNodeSorter();
1148
1157
  const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1149
- const uniqueGroups = useNodesGroups(ui.nodes);
1150
- const options = Object.fromEntries(
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(
1151
1163
  Object.values(clientFetch.UiNodeGroupEnum).filter((group) => {
1152
1164
  var _a2;
1153
- return (_a2 = uniqueGroups.groups[group]) == null ? void 0 : _a2.length;
1165
+ return (_a2 = groupsToShow.groups[group]) == null ? void 0 : _a2.length;
1154
1166
  }).filter(
1155
1167
  (group) => ![
1156
1168
  clientFetch.UiNodeGroupEnum.Oidc,
@@ -1162,7 +1174,17 @@ function OryTwoStepCard() {
1162
1174
  ].includes(group)
1163
1175
  ).map((g) => [g, {}])
1164
1176
  );
1165
- if (clientFetch.UiNodeGroupEnum.Code in options) {
1177
+ const authMethodAdditionalNodes = ui.nodes.filter(
1178
+ ({ group }) => [
1179
+ clientFetch.UiNodeGroupEnum.Oidc,
1180
+ clientFetch.UiNodeGroupEnum.Saml,
1181
+ clientFetch.UiNodeGroupEnum.Default,
1182
+ clientFetch.UiNodeGroupEnum.IdentifierFirst,
1183
+ clientFetch.UiNodeGroupEnum.Profile,
1184
+ clientFetch.UiNodeGroupEnum.Captcha
1185
+ ].includes(group)
1186
+ );
1187
+ if (clientFetch.UiNodeGroupEnum.Code in authMethodBlocks) {
1166
1188
  let identifier = (_b = (_a = findNode(ui.nodes, {
1167
1189
  group: "identifier_first",
1168
1190
  node_type: "input",
@@ -1174,7 +1196,7 @@ function OryTwoStepCard() {
1174
1196
  name: "address"
1175
1197
  })) == null ? void 0 : _c.attributes) == null ? void 0 : _d.value);
1176
1198
  if (identifier) {
1177
- options[clientFetch.UiNodeGroupEnum.Code] = {
1199
+ authMethodBlocks[clientFetch.UiNodeGroupEnum.Code] = {
1178
1200
  title: {
1179
1201
  id: "identities.messages.1010023",
1180
1202
  values: { address: identifier }
@@ -1183,7 +1205,7 @@ function OryTwoStepCard() {
1183
1205
  }
1184
1206
  }
1185
1207
  const nonSsoNodes = removeSsoNodes(ui.nodes);
1186
- const finalNodes = formState.current === "method_active" ? getFinalNodes(uniqueGroups.groups, formState.method) : [];
1208
+ const finalNodes = formState.current === "method_active" ? getFinalNodes(groupsToShow.groups, formState.method) : [];
1187
1209
  const handleAfterFormSubmit = (method) => {
1188
1210
  if (typeof method !== "string" || !isUINodeGroupEnum(method)) {
1189
1211
  return;
@@ -1199,48 +1221,99 @@ function OryTwoStepCard() {
1199
1221
  (node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
1200
1222
  );
1201
1223
  const showSso = !(formState.current === "method_active" && !(formState.method === clientFetch.UiNodeGroupEnum.Oidc || formState.method === clientFetch.UiNodeGroupEnum.Saml));
1202
- const showSsoDivider = hasSso && nonSsoNodes.filter((n) => {
1224
+ const showSsoDivider = hasSso && nonSsoNodes.some((n) => {
1203
1225
  if (clientFetch.isUiNodeInputAttributes(n.attributes)) {
1204
1226
  return n.attributes.type !== clientFetch.UiNodeInputAttributesTypeEnum.Hidden;
1205
1227
  } else if (clientFetch.isUiNodeScriptAttributes(n.attributes)) {
1206
1228
  return false;
1207
1229
  }
1208
1230
  return true;
1209
- }).length > 0;
1210
- const captchaNodes = ui.nodes.filter(
1211
- (n) => n.group === clientFetch.UiNodeGroupEnum.Captcha
1212
- );
1213
- return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1214
- /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1215
- /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1216
- /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1217
- showSso && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1218
- /* @__PURE__ */ jsxRuntime.jsxs(OryForm, { onAfterSubmit: handleAfterFormSubmit, children: [
1219
- formState.current === "provide_identifier" && /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1220
- showSsoDivider && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1221
- nonSsoNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1231
+ });
1232
+ const noMethods = {
1233
+ id: 5000002,
1234
+ text: intl.formatMessage({
1235
+ id: `identities.messages.${5000002}`,
1236
+ defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
1237
+ }),
1238
+ type: "error"
1239
+ };
1240
+ switch (formState.current) {
1241
+ case "provide_identifier":
1242
+ return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1243
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1244
+ /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1245
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1246
+ showSso && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1247
+ /* @__PURE__ */ jsxRuntime.jsx(
1248
+ OryForm,
1249
+ {
1250
+ "data-testid": `ory/form/methods/local`,
1251
+ onAfterSubmit: handleAfterFormSubmit,
1252
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1253
+ showSsoDivider && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1254
+ nonSsoNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1255
+ ] })
1256
+ }
1257
+ )
1222
1258
  ] }),
1223
- formState.current === "select_method" && /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1224
- Object.entries(options).length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1225
- Object.entries(options).length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
1226
- AuthMethodList,
1259
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1260
+ ] });
1261
+ case "select_method":
1262
+ return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1263
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1264
+ /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1265
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1266
+ showSso && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1267
+ Object.entries(authMethodBlocks).length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
1268
+ OryForm,
1227
1269
  {
1228
- options,
1229
- setSelectedGroup: (group) => dispatchFormState({
1230
- type: "action_select_method",
1231
- method: group
1232
- })
1270
+ "data-testid": `ory/form/methods/local`,
1271
+ onAfterSubmit: handleAfterFormSubmit,
1272
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1273
+ /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1274
+ /* @__PURE__ */ jsxRuntime.jsx(
1275
+ AuthMethodList,
1276
+ {
1277
+ options: authMethodBlocks,
1278
+ setSelectedGroup: (group) => dispatchFormState({
1279
+ type: "action_select_method",
1280
+ method: group
1281
+ })
1282
+ }
1283
+ ),
1284
+ authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1285
+ ] })
1233
1286
  }
1234
- ),
1235
- captchaNodes.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1287
+ ) : /* @__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) }) })
1236
1288
  ] }),
1237
- formState.current === "method_active" && /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1238
- ui.nodes.filter((n) => n.type === "script").map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1239
- finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1289
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1290
+ ] });
1291
+ case "method_active":
1292
+ return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1293
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1294
+ /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1295
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1296
+ showSso && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1297
+ /* @__PURE__ */ jsxRuntime.jsx(
1298
+ OryForm,
1299
+ {
1300
+ "data-testid": `ory/form/methods/local`,
1301
+ onAfterSubmit: handleAfterFormSubmit,
1302
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1303
+ ui.nodes.filter(
1304
+ (n) => clientFetch.isUiNodeScriptAttributes(n.attributes) || n.group === clientFetch.UiNodeGroupEnum.Captcha || n.group === clientFetch.UiNodeGroupEnum.Default || n.group === clientFetch.UiNodeGroupEnum.Profile
1305
+ ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1306
+ finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1307
+ ] })
1308
+ }
1309
+ )
1240
1310
  ] }),
1241
1311
  /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1242
- ] })
1243
- ] })
1312
+ ] });
1313
+ }
1314
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1315
+ "unknown form state: ",
1316
+ formState.current
1244
1317
  ] });
1245
1318
  }
1246
1319
  function AuthMethodList({ options, setSelectedGroup }) {
@@ -1674,16 +1747,19 @@ function SettingsSectionContent({ group, nodes }) {
1674
1747
  const { Card } = useComponents();
1675
1748
  const intl = reactIntl.useIntl();
1676
1749
  const { flow } = useOryFlow();
1677
- const uniqueGroups = useNodesGroups(flow.ui.nodes);
1750
+ const groupedNodes = useNodesGroups(flow.ui.nodes, {
1751
+ // Script nodes are already handled by the parent component.
1752
+ omit: ["script"]
1753
+ });
1678
1754
  if (group === clientFetch.UiNodeGroupEnum.Totp) {
1679
1755
  return /* @__PURE__ */ jsxRuntime.jsxs(
1680
1756
  OryFormSection,
1681
1757
  {
1682
- nodes: uniqueGroups.groups.totp,
1758
+ nodes: groupedNodes.groups.totp,
1683
1759
  "data-testid": "ory/screen/settings/group/totp",
1684
1760
  children: [
1685
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsTotp, { nodes: (_a = uniqueGroups.groups.totp) != null ? _a : [] }),
1686
- (_b = uniqueGroups.groups.default) == null ? void 0 : _b.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1761
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsTotp, { nodes: (_a = groupedNodes.groups.totp) != null ? _a : [] }),
1762
+ (_b = groupedNodes.groups.default) == null ? void 0 : _b.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1687
1763
  ]
1688
1764
  }
1689
1765
  );
@@ -1692,16 +1768,16 @@ function SettingsSectionContent({ group, nodes }) {
1692
1768
  return /* @__PURE__ */ jsxRuntime.jsxs(
1693
1769
  OryFormSection,
1694
1770
  {
1695
- nodes: uniqueGroups.groups.lookup_secret,
1771
+ nodes: groupedNodes.groups.lookup_secret,
1696
1772
  "data-testid": "ory/screen/settings/group/lookup_secret",
1697
1773
  children: [
1698
1774
  /* @__PURE__ */ jsxRuntime.jsx(
1699
1775
  OrySettingsRecoveryCodes,
1700
1776
  {
1701
- nodes: (_c = uniqueGroups.groups.lookup_secret) != null ? _c : []
1777
+ nodes: (_c = groupedNodes.groups.lookup_secret) != null ? _c : []
1702
1778
  }
1703
1779
  ),
1704
- (_d = uniqueGroups.groups.default) == null ? void 0 : _d.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1780
+ (_d = groupedNodes.groups.default) == null ? void 0 : _d.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1705
1781
  ]
1706
1782
  }
1707
1783
  );
@@ -1710,11 +1786,11 @@ function SettingsSectionContent({ group, nodes }) {
1710
1786
  return /* @__PURE__ */ jsxRuntime.jsxs(
1711
1787
  OryFormSection,
1712
1788
  {
1713
- nodes: uniqueGroups.groups.oidc,
1789
+ nodes: groupedNodes.groups.oidc,
1714
1790
  "data-testid": "ory/screen/settings/group/oidc",
1715
1791
  children: [
1716
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsOidc, { nodes: (_e = uniqueGroups.groups.oidc) != null ? _e : [] }),
1717
- (_f = uniqueGroups.groups.default) == null ? void 0 : _f.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1792
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsOidc, { nodes: (_e = groupedNodes.groups.oidc) != null ? _e : [] }),
1793
+ (_f = groupedNodes.groups.default) == null ? void 0 : _f.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1718
1794
  ]
1719
1795
  }
1720
1796
  );
@@ -1723,11 +1799,11 @@ function SettingsSectionContent({ group, nodes }) {
1723
1799
  return /* @__PURE__ */ jsxRuntime.jsxs(
1724
1800
  OryFormSection,
1725
1801
  {
1726
- nodes: uniqueGroups.groups.webauthn,
1802
+ nodes: groupedNodes.groups.webauthn,
1727
1803
  "data-testid": "ory/screen/settings/group/webauthn",
1728
1804
  children: [
1729
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsWebauthn, { nodes: (_g = uniqueGroups.groups.webauthn) != null ? _g : [] }),
1730
- (_h = uniqueGroups.groups.default) == null ? void 0 : _h.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1805
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsWebauthn, { nodes: (_g = groupedNodes.groups.webauthn) != null ? _g : [] }),
1806
+ (_h = groupedNodes.groups.default) == null ? void 0 : _h.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1731
1807
  ]
1732
1808
  }
1733
1809
  );
@@ -1736,11 +1812,11 @@ function SettingsSectionContent({ group, nodes }) {
1736
1812
  return /* @__PURE__ */ jsxRuntime.jsxs(
1737
1813
  OryFormSection,
1738
1814
  {
1739
- nodes: uniqueGroups.groups.passkey,
1815
+ nodes: groupedNodes.groups.passkey,
1740
1816
  "data-testid": "ory/screen/settings/group/passkey",
1741
1817
  children: [
1742
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsPasskey, { nodes: (_i = uniqueGroups.groups.passkey) != null ? _i : [] }),
1743
- (_j = uniqueGroups.groups.default) == null ? void 0 : _j.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1818
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsPasskey, { nodes: (_i = groupedNodes.groups.passkey) != null ? _i : [] }),
1819
+ (_j = groupedNodes.groups.default) == null ? void 0 : _j.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1744
1820
  ]
1745
1821
  }
1746
1822
  );
@@ -1761,7 +1837,7 @@ function SettingsSectionContent({ group, nodes }) {
1761
1837
  id: `settings.${group}.description`
1762
1838
  }),
1763
1839
  children: [
1764
- (_k = uniqueGroups.groups.default) == null ? void 0 : _k.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1840
+ (_k = groupedNodes.groups.default) == null ? void 0 : _k.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1765
1841
  nodes.filter(
1766
1842
  (node) => "type" in node.attributes && node.attributes.type !== "submit"
1767
1843
  ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
@@ -1775,16 +1851,16 @@ function SettingsSectionContent({ group, nodes }) {
1775
1851
  }
1776
1852
  );
1777
1853
  }
1778
- var getScriptNode = (nodes) => nodes.find(
1779
- (node) => "id" in node.attributes && node.attributes.id === "webauthn_script"
1854
+ var onlyScriptNodes = (nodes) => nodes.filter(
1855
+ (node) => clientFetch.isUiNodeScriptAttributes(node.attributes) && node.attributes.id === "webauthn_script"
1780
1856
  );
1781
1857
  function OrySettingsCard() {
1782
1858
  const { flow } = useOryFlow();
1783
- const uniqueGroups = useNodesGroups(flow.ui.nodes);
1784
- const scriptNode = getScriptNode(flow.ui.nodes);
1859
+ const uniqueGroups = useNodesGroups(flow.ui.nodes, { omit: ["script"] });
1860
+ const scriptNodes = onlyScriptNodes(flow.ui.nodes);
1785
1861
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1786
1862
  /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1787
- scriptNode && /* @__PURE__ */ jsxRuntime.jsx(Node, { node: scriptNode }),
1863
+ scriptNodes.map((n) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node: n })),
1788
1864
  uniqueGroups.entries.map(([group, nodes]) => {
1789
1865
  if (group === clientFetch.UiNodeGroupEnum.Default) {
1790
1866
  return null;
@@ -2326,20 +2402,20 @@ var de_default = {
2326
2402
  "login.cancel-label": "Nicht das richtige Konto?",
2327
2403
  "identities.messages.1010023": "Code an {address} senden",
2328
2404
  "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.",
2329
- "identities.messages.1010017": "",
2330
- "identities.messages.1010018": "",
2331
- "identities.messages.1010019": "",
2405
+ "identities.messages.1010017": "Anmelden und verbinden",
2406
+ "identities.messages.1010018": "Mit {provider} best\xE4tigen",
2407
+ "identities.messages.1010019": "Code senden um fortzufahren",
2332
2408
  "identities.messages.1010020": "",
2333
- "identities.messages.1010021": "",
2334
- "identities.messages.1010022": "",
2335
- "identities.messages.1040007": "",
2336
- "identities.messages.1040008": "",
2337
- "identities.messages.1040009": "",
2409
+ "identities.messages.1010021": "Mit Paskey anmelden",
2410
+ "identities.messages.1010022": "Mit Passwort anmelden",
2411
+ "identities.messages.1040007": "Mit Passkey registrieren",
2412
+ "identities.messages.1040008": "Zur\xFCck",
2413
+ "identities.messages.1040009": "Bitte w\xE4hlen Sie eine Authentifizierungsmethode, um fortzufahren.",
2338
2414
  "identities.messages.1050019": "Passkey hinzuf\xFCgen",
2339
- "identities.messages.1050020": "",
2340
- "identities.messages.4000037": "",
2341
- "identities.messages.4010009": "",
2342
- "identities.messages.4010010": "",
2415
+ "identities.messages.1050020": 'Passkey "{display_name}" entfernen',
2416
+ "identities.messages.4000037": "F\xFCr die eingegebenen Daten existiert kein Account",
2417
+ "identities.messages.4010009": "Die Authentifizierungsmethode stimmt nicht mit der vorherigen Authentifizierungsmethode \xFCberein. Bitte versuchen Sie es erneut.",
2418
+ "identities.messages.4010010": "Die eingegebene Adresse stimmt nicht mit der Adresse \xFCberein, die Sie bei der Registrierung angegeben haben. Bitte versuchen Sie es erneut.",
2343
2419
  "input.placeholder": "{placeholder} eingeben",
2344
2420
  "card.header.parts.code": "einem Code per E-Mail",
2345
2421
  "card.header.parts.identifier-first": "Ihr {identifierLabel}",
@@ -2440,7 +2516,6 @@ var es_default = {
2440
2516
  "error.back-button": "Regresar",
2441
2517
  "error.description": "Ocurri\xF3 un error con el siguiente mensaje:",
2442
2518
  "error.support-email-link": "Si el problema persiste, por favor contacte a <a>{contactSupportEmail}</a>",
2443
- "error.title": "",
2444
2519
  "error.title-internal-server-error": "Error Interno del Servidor",
2445
2520
  "error.title-not-found": "404 - P\xE1gina no encontrada",
2446
2521
  "identities.messages.1010001": "Iniciar sesi\xF3n",
@@ -2615,45 +2690,6 @@ var es_default = {
2615
2690
  "two-step.totp.description": "Utilice un c\xF3digo de un solo uso de 6 d\xEDgitos de su aplicaci\xF3n de autenticaci\xF3n",
2616
2691
  "two-step.lookup_secret.title": "C\xF3digo de recuperaci\xF3n de respaldo",
2617
2692
  "two-step.lookup_secret.description": "Utilice uno de sus c\xF3digos de respaldo de 8 d\xEDgitos para autenticarse",
2618
- "identities.messages.1010016": "",
2619
- "identities.messages.1010017": "",
2620
- "identities.messages.1010018": "",
2621
- "identities.messages.1010019": "",
2622
- "identities.messages.1010020": "",
2623
- "identities.messages.1010021": "",
2624
- "identities.messages.1010022": "",
2625
- "identities.messages.1010023": "",
2626
- "identities.messages.1040007": "",
2627
- "identities.messages.1040008": "",
2628
- "identities.messages.1040009": "",
2629
- "identities.messages.1050019": "",
2630
- "identities.messages.1050020": "",
2631
- "identities.messages.1070014": "",
2632
- "identities.messages.1070015": "",
2633
- "identities.messages.4000037": "",
2634
- "identities.messages.4000038": "",
2635
- "identities.messages.4010009": "",
2636
- "identities.messages.4010010": "",
2637
- "login.cancel-button": "",
2638
- "login.cancel-label": "",
2639
- "input.placeholder": "",
2640
- "card.header.description.login": "",
2641
- "card.header.description.registration": "",
2642
- "card.header.parts.code": "",
2643
- "card.header.parts.identifier-first": "",
2644
- "card.header.parts.oidc": "",
2645
- "card.header.parts.passkey": "",
2646
- "card.header.parts.password.login": "",
2647
- "card.header.parts.password.registration": "",
2648
- "card.header.parts.webauthn": "",
2649
- "forms.label.forgot-password": "",
2650
- "login.subtitle": "",
2651
- "login.subtitle-refresh": "",
2652
- "misc.or": "",
2653
- "recovery.subtitle": "",
2654
- "registration.subtitle": "",
2655
- "settings.subtitle": "",
2656
- "verification.subtitle": "",
2657
2693
  "settings.totp.info.linked": "Actualmente tienes una aplicaci\xF3n de autenticaci\xF3n conectada.",
2658
2694
  "settings.totp.info.not-linked": "Para habilitar, escanea el c\xF3digo QR con tu autenticador e ingresa el c\xF3digo.",
2659
2695
  "settings.totp.title": "Aplicaci\xF3n Autenticadora",
@@ -2671,25 +2707,6 @@ var es_default = {
2671
2707
  "settings.profile.title": "Configuraci\xF3n de Perfil",
2672
2708
  "settings.webauthn.description": "Administra la configuraci\xF3n de tu token de hardware",
2673
2709
  "settings.webauthn.title": "Gestionar Tokens de Hardware",
2674
- "settings.oidc.info": "",
2675
- "settings.passkey.info": "",
2676
- "settings.title-lookup-secret": "",
2677
- "settings.title-navigation": "",
2678
- "settings.title-oidc": "",
2679
- "settings.title-passkey": "",
2680
- "settings.title-password": "",
2681
- "settings.title-profile": "",
2682
- "settings.title-totp": "",
2683
- "settings.title-webauthn": "",
2684
- "settings.webauthn.info": "",
2685
- "card.footer.select-another-method": "",
2686
- "account-linking.title": "",
2687
- "property.code": "",
2688
- "property.email": "",
2689
- "property.identifier": "",
2690
- "property.password": "",
2691
- "property.phone": "",
2692
- "property.username": "",
2693
2710
  "consent.title": "Autorizar {party}",
2694
2711
  "consent.subtitle": "Una aplicaci\xF3n de terceros quiere acceder a la informaci\xF3n asociada a su cuenta {identifier}.",
2695
2712
  "consent.scope.openid.title": "Identidad",
@@ -2704,12 +2721,71 @@ var es_default = {
2704
2721
  "consent.scope.address.description": "Acceda a su direcci\xF3n postal.",
2705
2722
  "consent.scope.phone.title": "N\xFAmero de tel\xE9fono",
2706
2723
  "consent.scope.phone.description": "Recupere su n\xFAmero de tel\xE9fono y su estado de verificaci\xF3n.",
2707
- "error.action.go-back": "",
2708
- "error.footer.copy": "",
2709
- "error.footer.text": "",
2710
- "error.instructions": "",
2711
- "error.title.what-can-i-do": "",
2712
- "error.title.what-happened": ""
2724
+ "error.title": "Ocurri\xF3 un error",
2725
+ "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.',
2726
+ "identities.messages.1010017": "Iniciar sesi\xF3n y vincular",
2727
+ "identities.messages.1010018": "Confirmar con {provider}",
2728
+ "identities.messages.1010019": "Solicitar c\xF3digo para continuar",
2729
+ "identities.messages.1010021": "Iniciar sesi\xF3n con clave de acceso",
2730
+ "identities.messages.1010022": "Iniciar sesi\xF3n con contrase\xF1a",
2731
+ "identities.messages.1010023": "Enviar c\xF3digo a {address}",
2732
+ "identities.messages.1040007": "Registrarse con clave de acceso",
2733
+ "identities.messages.1040008": "Atr\xE1s",
2734
+ "identities.messages.1040009": "Por favor, elige una credencial para autenticarte.",
2735
+ "identities.messages.1050019": "Agregar clave de acceso",
2736
+ "identities.messages.1070014": "Iniciar sesi\xF3n y vincular credencial",
2737
+ "identities.messages.1070015": "Por favor, completa el desaf\xEDo captcha para continuar.",
2738
+ "identities.messages.4000037": "Esta cuenta no existe o no tiene ning\xFAn m\xE9todo de inicio de sesi\xF3n configurado.",
2739
+ "identities.messages.4000038": "Fall\xF3 la verificaci\xF3n de Captcha, por favor intenta de nuevo.",
2740
+ "identities.messages.4010009": "Las credenciales vinculadas no coinciden.",
2741
+ "identities.messages.4010010": "La direcci\xF3n que ingresaste no coincide con ninguna direcci\xF3n conocida en la cuenta actual.",
2742
+ "login.cancel-button": "Cancelar",
2743
+ "login.cancel-label": "\xBFNo es la cuenta correcta?",
2744
+ "login.subtitle": "Iniciar sesi\xF3n con {parts}",
2745
+ "login.subtitle-refresh": "Confirma tu identidad con {parts}",
2746
+ "recovery.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para recibir un c\xF3digo de acceso \xFAnico",
2747
+ "registration.subtitle": "Registrarse con {parts}",
2748
+ "settings.subtitle": "Actualiza la configuraci\xF3n de tu cuenta",
2749
+ "settings.title-lookup-secret": "Administrar c\xF3digos de recuperaci\xF3n de respaldo 2FA",
2750
+ "settings.title-navigation": "Configuraci\xF3n de la cuenta",
2751
+ "settings.title-oidc": "Inicio de sesi\xF3n social",
2752
+ "settings.title-password": "Cambiar contrase\xF1a",
2753
+ "settings.title-profile": "Configuraci\xF3n del perfil",
2754
+ "settings.title-totp": "Administrar la aplicaci\xF3n de autenticaci\xF3n 2FA TOTP",
2755
+ "settings.title-webauthn": "Administrar tokens de hardware",
2756
+ "settings.title-passkey": "Administrar claves de acceso",
2757
+ "verification.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para verificarla",
2758
+ "input.placeholder": "Ingresa tu {placeholder}",
2759
+ "card.header.parts.oidc": "un proveedor social",
2760
+ "card.header.parts.password.registration": "tu {identifierLabel} y una contrase\xF1a",
2761
+ "card.header.parts.password.login": "tu {identifierLabel} y contrase\xF1a",
2762
+ "card.header.parts.code": "un c\xF3digo enviado a tu correo electr\xF3nico",
2763
+ "card.header.parts.passkey": "una clave de acceso",
2764
+ "card.header.parts.webauthn": "una clave de seguridad",
2765
+ "card.header.parts.identifier-first": "tu {identifierLabel}",
2766
+ "card.header.description.login": "Iniciar sesi\xF3n con {identifierLabel}",
2767
+ "card.header.description.registration": "Registrarse con {identifierLabel}",
2768
+ "misc.or": "o",
2769
+ "forms.label.forgot-password": "\xBFOlvidaste tu contrase\xF1a?",
2770
+ "settings.oidc.info": "Las cuentas conectadas de estos proveedores se pueden utilizar para iniciar sesi\xF3n en tu cuenta",
2771
+ "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",
2772
+ "settings.passkey.info": "Administra la configuraci\xF3n de tus claves de acceso",
2773
+ "card.footer.select-another-method": "Seleccionar otro m\xE9todo",
2774
+ "account-linking.title": "Vincular cuenta",
2775
+ "property.password": "contrase\xF1a",
2776
+ "property.email": "correo electr\xF3nico",
2777
+ "property.phone": "tel\xE9fono",
2778
+ "property.username": "nombre de usuario",
2779
+ "property.identifier": "identificador",
2780
+ "property.code": "c\xF3digo",
2781
+ "error.title.what-happened": "\xBFQu\xE9 pas\xF3?",
2782
+ "error.title.what-can-i-do": "\xBFQu\xE9 puedo hacer?",
2783
+ "error.instructions": "Por favor, int\xE9ntalo de nuevo en unos minutos o contacta al operador del sitio web.",
2784
+ "error.footer.text": "Al informar este error, incluye la siguiente informaci\xF3n:",
2785
+ "error.footer.copy": "Copiar",
2786
+ "error.action.go-back": "Regresar",
2787
+ "identities.messages.1010020": "",
2788
+ "identities.messages.1050020": 'Eliminar passkey "{display_name}"'
2713
2789
  };
2714
2790
 
2715
2791
  // src/locales/fr.json
@@ -2900,81 +2976,10 @@ var fr_default = {
2900
2976
  "two-step.totp.description": "Utilisez un code \xE0 usage unique \xE0 6 chiffres provenant de votre application d'authentification",
2901
2977
  "two-step.lookup_secret.title": "Code de r\xE9cup\xE9ration de secours",
2902
2978
  "two-step.lookup_secret.description": "Utilisez l'un de vos codes de secours \xE0 8 chiffres pour vous authentifier",
2903
- "identities.messages.1010023": "",
2904
- "identities.messages.1070015": "",
2905
- "identities.messages.4000038": "",
2906
- "login.cancel-button": "",
2907
- "login.cancel-label": "",
2908
- "identities.messages.1010016": "",
2909
- "identities.messages.1010017": "",
2910
- "identities.messages.1010018": "",
2911
- "identities.messages.1010019": "",
2912
- "identities.messages.1010020": "",
2913
- "identities.messages.1010021": "",
2914
- "identities.messages.1010022": "",
2915
- "identities.messages.1040007": "",
2916
- "identities.messages.1040008": "",
2917
- "identities.messages.1040009": "",
2918
- "identities.messages.1050019": "",
2919
- "identities.messages.1050020": "",
2920
- "identities.messages.1070014": "",
2921
- "identities.messages.4000037": "",
2922
- "identities.messages.4010009": "",
2923
- "identities.messages.4010010": "",
2924
- "input.placeholder": "",
2925
- "card.header.description.login": "",
2926
- "card.header.description.registration": "",
2927
- "card.header.parts.code": "",
2928
- "card.header.parts.identifier-first": "",
2929
- "card.header.parts.oidc": "",
2930
- "card.header.parts.passkey": "",
2931
- "card.header.parts.password.login": "",
2932
- "card.header.parts.password.registration": "",
2933
- "card.header.parts.webauthn": "",
2934
- "forms.label.forgot-password": "",
2935
- "login.subtitle": "",
2936
- "login.subtitle-refresh": "",
2937
- "misc.or": "",
2938
- "recovery.subtitle": "",
2939
- "registration.subtitle": "",
2940
- "settings.subtitle": "",
2941
- "verification.subtitle": "",
2942
2979
  "settings.totp.info.linked": "Vous avez actuellement une application d'authentification connect\xE9e.",
2943
2980
  "settings.totp.info.not-linked": "Pour activer, scannez le QR code avec votre authentificateur et entrez le code.",
2944
2981
  "settings.totp.title": "Application d'authentification",
2945
2982
  "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.",
2946
- "settings.lookup_secret.description": "",
2947
- "settings.lookup_secret.title": "",
2948
- "settings.navigation.title": "",
2949
- "settings.oidc.description": "",
2950
- "settings.oidc.info": "",
2951
- "settings.oidc.title": "",
2952
- "settings.passkey.description": "",
2953
- "settings.passkey.info": "",
2954
- "settings.passkey.title": "",
2955
- "settings.password.description": "",
2956
- "settings.password.title": "",
2957
- "settings.profile.description": "",
2958
- "settings.profile.title": "",
2959
- "settings.title-lookup-secret": "",
2960
- "settings.title-navigation": "",
2961
- "settings.title-oidc": "",
2962
- "settings.title-passkey": "",
2963
- "settings.title-password": "",
2964
- "settings.title-profile": "",
2965
- "settings.title-totp": "",
2966
- "settings.title-webauthn": "",
2967
- "settings.webauthn.description": "",
2968
- "settings.webauthn.info": "",
2969
- "settings.webauthn.title": "",
2970
- "card.footer.select-another-method": "",
2971
- "account-linking.title": "",
2972
- "property.code": "",
2973
- "property.email": "",
2974
- "property.identifier": "",
2975
- "property.password": "",
2976
- "property.phone": "",
2977
- "property.username": "",
2978
2983
  "consent.title": "Autoriser {party}",
2979
2984
  "consent.subtitle": "Une application tierce souhaite acc\xE9der aux informations associ\xE9es \xE0 votre compte {identifier}.",
2980
2985
  "consent.scope.openid.title": "Identit\xE9",
@@ -2989,12 +2994,83 @@ var fr_default = {
2989
2994
  "consent.scope.address.description": "Acc\xE8de \xE0 votre adresse postale.",
2990
2995
  "consent.scope.phone.title": "Num\xE9ro de t\xE9l\xE9phone",
2991
2996
  "consent.scope.phone.description": "R\xE9cup\xE8re votre num\xE9ro de t\xE9l\xE9phone et son statut de v\xE9rification.",
2992
- "error.action.go-back": "",
2993
- "error.footer.copy": "",
2994
- "error.footer.text": "",
2995
- "error.title.what-can-i-do": "",
2996
- "error.title.what-happened": "",
2997
- "error.instructions": ""
2997
+ "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.",
2998
+ "identities.messages.1010017": "Se connecter et lier",
2999
+ "identities.messages.1010018": "Confirmer avec {provider}",
3000
+ "identities.messages.1010019": "Demander un code pour continuer",
3001
+ "identities.messages.1010021": "Se connecter avec une cl\xE9 d'acc\xE8s",
3002
+ "identities.messages.1010022": "Se connecter avec un mot de passe",
3003
+ "identities.messages.1010023": "Envoyer le code \xE0 {address}",
3004
+ "identities.messages.1040007": "S'inscrire avec une cl\xE9 d'acc\xE8s",
3005
+ "identities.messages.1040008": "Retour",
3006
+ "identities.messages.1040009": "Veuillez choisir une identification pour vous authentifier.",
3007
+ "identities.messages.1050019": "Ajouter une cl\xE9 d'acc\xE8s",
3008
+ "identities.messages.1050020": "Supprimer la cl\xE9 d'acc\xE8s \xAB {display_name} \xBB",
3009
+ "identities.messages.1070014": "Se connecter et lier l'identification",
3010
+ "identities.messages.1070015": "Veuillez compl\xE9ter le d\xE9fi captcha pour continuer.",
3011
+ "identities.messages.4000037": "Ce compte n'existe pas ou n'a aucune m\xE9thode de connexion configur\xE9e.",
3012
+ "identities.messages.4000038": "La v\xE9rification Captcha a \xE9chou\xE9, veuillez r\xE9essayer.",
3013
+ "identities.messages.4010009": "Les identifications li\xE9es ne correspondent pas.",
3014
+ "identities.messages.4010010": "L'adresse que vous avez saisie ne correspond \xE0 aucune adresse connue dans le compte actuel.",
3015
+ "login.cancel-button": "Annuler",
3016
+ "login.cancel-label": "Ce n'est pas le bon compte\xA0?",
3017
+ "login.subtitle": "Se connecter avec {parts}",
3018
+ "login.subtitle-refresh": "Confirmez votre identit\xE9 avec {parts}",
3019
+ "recovery.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour recevoir un code d'acc\xE8s unique",
3020
+ "registration.subtitle": "S'inscrire avec {parts}",
3021
+ "settings.subtitle": "Mettre \xE0 jour les param\xE8tres de votre compte",
3022
+ "settings.title-lookup-secret": "G\xE9rer les codes de r\xE9cup\xE9ration de sauvegarde 2FA",
3023
+ "settings.title-navigation": "Param\xE8tres du compte",
3024
+ "settings.title-oidc": "Connexion via les r\xE9seaux sociaux",
3025
+ "settings.title-password": "Changer le mot de passe",
3026
+ "settings.title-profile": "Param\xE8tres du profil",
3027
+ "settings.title-totp": "G\xE9rer l'application d'authentification 2FA TOTP",
3028
+ "settings.title-webauthn": "G\xE9rer les jetons mat\xE9riels",
3029
+ "settings.title-passkey": "G\xE9rer les cl\xE9s d'acc\xE8s",
3030
+ "settings.navigation.title": "Param\xE8tres du compte",
3031
+ "settings.password.title": "Changer le mot de passe",
3032
+ "settings.password.description": "Modifier votre mot de passe",
3033
+ "settings.profile.title": "Param\xE8tres du profil",
3034
+ "settings.profile.description": "Mettre \xE0 jour les informations de votre profil",
3035
+ "settings.webauthn.title": "G\xE9rer les jetons mat\xE9riels",
3036
+ "settings.webauthn.description": "G\xE9rer les param\xE8tres de votre jeton mat\xE9riel",
3037
+ "verification.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour la v\xE9rifier",
3038
+ "input.placeholder": "Saisissez votre {placeholder}",
3039
+ "card.header.parts.oidc": "un fournisseur de r\xE9seaux sociaux",
3040
+ "card.header.parts.password.registration": "votre {identifierLabel} et un mot de passe",
3041
+ "card.header.parts.password.login": "votre {identifierLabel} et votre mot de passe",
3042
+ "card.header.parts.code": "un code envoy\xE9 \xE0 votre adresse e-mail",
3043
+ "card.header.parts.passkey": "une cl\xE9 d'acc\xE8s",
3044
+ "card.header.parts.webauthn": "une cl\xE9 de s\xE9curit\xE9",
3045
+ "card.header.parts.identifier-first": "votre {identifierLabel}",
3046
+ "card.header.description.login": "Se connecter avec {identifierLabel}",
3047
+ "card.header.description.registration": "S'inscrire avec {identifierLabel}",
3048
+ "misc.or": "ou",
3049
+ "forms.label.forgot-password": "Mot de passe oubli\xE9?",
3050
+ "settings.lookup_secret.title": "Codes de r\xE9cup\xE9ration de sauvegarde (second facteur)",
3051
+ "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.",
3052
+ "settings.oidc.title": "Comptes connect\xE9s",
3053
+ "settings.oidc.description": "Connectez un fournisseur de connexion sociale \xE0 votre compte.",
3054
+ "settings.oidc.info": "Les comptes connect\xE9s de ces fournisseurs peuvent \xEAtre utilis\xE9s pour vous connecter \xE0 votre compte",
3055
+ "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",
3056
+ "settings.passkey.title": "G\xE9rer les cl\xE9s d'acc\xE8s",
3057
+ "settings.passkey.description": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3058
+ "settings.passkey.info": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
3059
+ "card.footer.select-another-method": "S\xE9lectionner une autre m\xE9thode",
3060
+ "account-linking.title": "Lier le compte",
3061
+ "property.password": "mot de passe",
3062
+ "property.email": "e-mail",
3063
+ "property.phone": "t\xE9l\xE9phone",
3064
+ "property.username": "nom d'utilisateur",
3065
+ "property.identifier": "identifiant",
3066
+ "property.code": "code",
3067
+ "error.title.what-happened": "Que s'est-il pass\xE9?",
3068
+ "error.title.what-can-i-do": "Que puis-je faire?",
3069
+ "error.instructions": "Veuillez r\xE9essayer dans quelques minutes ou contacter l'op\xE9rateur du site Web.",
3070
+ "error.footer.text": "Lorsque vous signalez cette erreur, veuillez inclure les informations suivantes:",
3071
+ "error.footer.copy": "Copier",
3072
+ "error.action.go-back": "Retour",
3073
+ "identities.messages.1010020": ""
2998
3074
  };
2999
3075
 
3000
3076
  // src/locales/nl.json