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

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
@@ -36,6 +36,7 @@ function useGroupSorter() {
36
36
  }
37
37
  var defaultNodeOrder = [
38
38
  "oidc",
39
+ "saml",
39
40
  "identifier_first",
40
41
  "default",
41
42
  "profile",
@@ -100,8 +101,10 @@ function isChoosingMethod(flow) {
100
101
  (node) => node.group === clientFetch.UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
101
102
  ) || flow.flowType === clientFetch.FlowType.Login && flow.flow.requested_aal === "aal2";
102
103
  }
103
- function filterOidcOut(nodes) {
104
- return nodes.filter((node) => node.group !== clientFetch.UiNodeGroupEnum.Oidc);
104
+ function removeSsoNodes(nodes) {
105
+ return nodes.filter(
106
+ (node) => !(node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml)
107
+ );
105
108
  }
106
109
  function getFinalNodes(uniqueGroups, selectedGroup) {
107
110
  var _a, _b, _c, _d;
@@ -186,13 +189,16 @@ function nodesToAuthMethodGroups(nodes, excludeAuthMethods = []) {
186
189
  ].includes(group)
187
190
  );
188
191
  }
189
- function useNodesGroups(nodes) {
192
+ function useNodesGroups(nodes, { omit } = {}) {
190
193
  const groupSorter = useGroupSorter();
191
194
  const groups = react.useMemo(() => {
192
195
  var _a;
193
196
  const groups2 = {};
194
197
  for (const node of nodes) {
195
- if (node.type === "script") {
198
+ if ((omit == null ? void 0 : omit.includes("script")) && clientFetch.isUiNodeScriptAttributes(node.attributes)) {
199
+ continue;
200
+ }
201
+ if ((omit == null ? void 0 : omit.includes("input_hidden")) && clientFetch.isUiNodeInputAttributes(node.attributes) && node.attributes.type === "hidden") {
196
202
  continue;
197
203
  }
198
204
  const groupNodes = (_a = groups2[node.group]) != null ? _a : [];
@@ -234,7 +240,9 @@ function parseStateFromFlow(flow) {
234
240
  return { current: "method_active", method: "code" };
235
241
  } else if (methodWithMessage) {
236
242
  return { current: "method_active", method: methodWithMessage.group };
237
- } else if (flow.flow.active && !["default", "identifier_first", "oidc"].includes(flow.flow.active)) {
243
+ } else if (flow.flow.active && !["default", "identifier_first", "oidc", "saml"].includes(
244
+ flow.flow.active
245
+ )) {
238
246
  return { current: "method_active", method: flow.flow.active };
239
247
  } else if (isChoosingMethod(flow)) {
240
248
  const authMethods = nodesToAuthMethodGroups(flow.flow.ui.nodes);
@@ -258,23 +266,32 @@ function parseStateFromFlow(flow) {
258
266
  break;
259
267
  case clientFetch.FlowType.Settings:
260
268
  return { current: "settings" };
269
+ case clientFetch.FlowType.OAuth2Consent:
270
+ return { current: "method_active", method: "oauth2_consent" };
261
271
  }
262
272
  console.warn(
263
273
  `[Ory/Elements React] Encountered an unknown form state on ${flow.flowType} flow with ID ${flow.flow.id}`
264
274
  );
265
275
  throw new Error("Unknown form state");
266
276
  }
267
- function formStateReducer(state, action) {
268
- switch (action.type) {
269
- case "action_flow_update":
270
- return parseStateFromFlow(action.flow);
271
- case "action_select_method":
272
- return { current: "method_active", method: action.method };
273
- }
274
- return state;
275
- }
276
277
  function useFormStateReducer(flow) {
277
- return react.useReducer(formStateReducer, parseStateFromFlow(flow));
278
+ const action = parseStateFromFlow(flow);
279
+ const [selectedMethod, setSelectedMethod] = react.useState();
280
+ const formStateReducer = (state, action2) => {
281
+ switch (action2.type) {
282
+ case "action_flow_update": {
283
+ if (selectedMethod)
284
+ return { current: "method_active", method: selectedMethod };
285
+ return parseStateFromFlow(action2.flow);
286
+ }
287
+ case "action_select_method": {
288
+ setSelectedMethod(action2.method);
289
+ return { current: "method_active", method: action2.method };
290
+ }
291
+ }
292
+ return state;
293
+ };
294
+ return react.useReducer(formStateReducer, action);
278
295
  }
279
296
  function useOryFlow() {
280
297
  const ctx = react.useContext(OryFlowContext);
@@ -364,6 +381,22 @@ function computeDefaultValues(nodes) {
364
381
  if (attrs.name === "method" || attrs.type === "submit" || typeof attrs.value === "undefined") {
365
382
  return acc;
366
383
  }
384
+ if (attrs.name.startsWith("grant_scope")) {
385
+ const scope = attrs.value;
386
+ if (Array.isArray(acc.grant_scope)) {
387
+ return {
388
+ ...acc,
389
+ // We want to have all scopes accepted by default, so that the user has to actively uncheck them.
390
+ grant_scope: [...acc.grant_scope, scope]
391
+ };
392
+ } else if (!acc.grant_scope) {
393
+ return {
394
+ ...acc,
395
+ grant_scope: [scope]
396
+ };
397
+ }
398
+ return acc;
399
+ }
367
400
  return unrollTrait(
368
401
  {
369
402
  name: attrs.name,
@@ -795,7 +828,7 @@ function useOryFormSubmit(onAfterSubmit) {
795
828
  if ("lookup_secret_confirm" in submitData || "lookup_secret_reveal" in submitData || "lookup_secret_regenerate" in submitData || "lookup_secret_disable" in submitData) {
796
829
  submitData.method = "lookup_secret";
797
830
  }
798
- if (submitData.method === "oidc" && submitData.link && supportsSelectAccountPrompt.includes(submitData.link)) {
831
+ if (submitData.method === clientFetch.UiNodeGroupEnum.Oidc && submitData.link && supportsSelectAccountPrompt.includes(submitData.link)) {
799
832
  submitData.upstream_parameters = {
800
833
  prompt: "select_account"
801
834
  };
@@ -813,6 +846,19 @@ function useOryFormSubmit(onAfterSubmit) {
813
846
  });
814
847
  break;
815
848
  }
849
+ case clientFetch.FlowType.OAuth2Consent: {
850
+ const response = await fetch(flowContainer.flow.ui.action, {
851
+ method: "POST",
852
+ body: JSON.stringify(data),
853
+ headers: {
854
+ "Content-Type": "application/json"
855
+ }
856
+ });
857
+ const oauth2Success = await response.json();
858
+ if (oauth2Success.redirect_to && typeof oauth2Success.redirect_to === "string") {
859
+ onRedirect(oauth2Success.redirect_to);
860
+ }
861
+ }
816
862
  }
817
863
  if ("password" in data) {
818
864
  methods.setValue("password", "");
@@ -827,7 +873,11 @@ function useOryFormSubmit(onAfterSubmit) {
827
873
  };
828
874
  return onSubmit;
829
875
  }
830
- function OryForm({ children, onAfterSubmit }) {
876
+ function OryForm({
877
+ children,
878
+ onAfterSubmit,
879
+ "data-testid": dataTestId
880
+ }) {
831
881
  const { Form } = useComponents();
832
882
  const flowContainer = useOryFlow();
833
883
  const methods = reactHookForm.useFormContext();
@@ -855,7 +905,7 @@ function OryForm({ children, onAfterSubmit }) {
855
905
  }),
856
906
  type: "error"
857
907
  };
858
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
908
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": dataTestId, children: [
859
909
  /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: m }, m.id) }),
860
910
  /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
861
911
  ] });
@@ -866,6 +916,7 @@ function OryForm({ children, onAfterSubmit }) {
866
916
  return /* @__PURE__ */ jsxRuntime.jsx(
867
917
  Form.Root,
868
918
  {
919
+ "data-testid": dataTestId,
869
920
  action: flowContainer.flow.ui.action,
870
921
  method: flowContainer.flow.ui.method,
871
922
  onSubmit: (e) => void methods.handleSubmit(onSubmit)(e),
@@ -900,7 +951,7 @@ var NodeInput = ({
900
951
  }) => {
901
952
  var _a;
902
953
  const { Node: Node2 } = useComponents();
903
- const { setValue } = reactHookForm.useFormContext();
954
+ const { setValue, watch } = reactHookForm.useFormContext();
904
955
  const {
905
956
  onloadTrigger,
906
957
  onclickTrigger,
@@ -913,7 +964,10 @@ var NodeInput = ({
913
964
  const isResendNode = ((_a = node.meta.label) == null ? void 0 : _a.id) === 1070008;
914
965
  const isScreenSelectionNode = "name" in node.attributes && node.attributes.name === "screen";
915
966
  const setFormValue = () => {
916
- if (attrs.value && !(isResendNode || isScreenSelectionNode)) {
967
+ if (isResendNode || isScreenSelectionNode || node.group === clientFetch.UiNodeGroupEnum.Oauth2Consent) {
968
+ return;
969
+ }
970
+ if (attrs.value !== void 0) {
917
971
  setValue(attrs.name, attrs.value);
918
972
  }
919
973
  };
@@ -936,8 +990,21 @@ var NodeInput = ({
936
990
  triggerToWindowCall(onclickTrigger);
937
991
  }
938
992
  };
939
- const isSocial = (attrs.name === "provider" || attrs.name === "link") && node.group === "oidc";
993
+ const isSocial = (attrs.name === "provider" || attrs.name === "link") && (node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml);
940
994
  const isPinCodeInput = attrs.name === "code" && node.group === "code" || attrs.name === "totp_code" && node.group === "totp";
995
+ const handleScopeChange = (checked) => {
996
+ const scopes = watch("grant_scope");
997
+ if (Array.isArray(scopes)) {
998
+ if (checked) {
999
+ setValue("grant_scope", Array.from(/* @__PURE__ */ new Set([...scopes, attrs.value])));
1000
+ } else {
1001
+ setValue(
1002
+ "grant_scope",
1003
+ scopes.filter((scope) => scope !== attrs.value)
1004
+ );
1005
+ }
1006
+ }
1007
+ };
941
1008
  switch (attributes.type) {
942
1009
  case clientFetch.UiNodeInputAttributesTypeEnum.Submit:
943
1010
  case clientFetch.UiNodeInputAttributesTypeEnum.Button:
@@ -947,6 +1014,9 @@ var NodeInput = ({
947
1014
  if (isResendNode || isScreenSelectionNode) {
948
1015
  return null;
949
1016
  }
1017
+ if (node.group === "oauth2_consent") {
1018
+ return null;
1019
+ }
950
1020
  return /* @__PURE__ */ jsxRuntime.jsx(
951
1021
  Node2.Label,
952
1022
  {
@@ -958,6 +1028,21 @@ var NodeInput = ({
958
1028
  case clientFetch.UiNodeInputAttributesTypeEnum.DatetimeLocal:
959
1029
  throw new Error("Not implemented");
960
1030
  case clientFetch.UiNodeInputAttributesTypeEnum.Checkbox:
1031
+ if (node.group === "oauth2_consent" && node.attributes.node_type === "input") {
1032
+ switch (node.attributes.name) {
1033
+ case "grant_scope":
1034
+ return /* @__PURE__ */ jsxRuntime.jsx(
1035
+ Node2.ConsentScopeCheckbox,
1036
+ {
1037
+ attributes: attrs,
1038
+ node,
1039
+ onCheckedChange: handleScopeChange
1040
+ }
1041
+ );
1042
+ default:
1043
+ return null;
1044
+ }
1045
+ }
961
1046
  return /* @__PURE__ */ jsxRuntime.jsx(
962
1047
  Node2.Label,
963
1048
  {
@@ -1019,7 +1104,9 @@ function OryFormOidcButtons() {
1019
1104
  flow: { ui }
1020
1105
  } = useOryFlow();
1021
1106
  const { setValue } = reactHookForm.useFormContext();
1022
- const filteredNodes = ui.nodes.filter((node) => node.group === "oidc");
1107
+ const filteredNodes = ui.nodes.filter(
1108
+ (node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
1109
+ );
1023
1110
  const { Form, Node: Node2 } = useComponents();
1024
1111
  if (filteredNodes.length === 0) {
1025
1112
  return null;
@@ -1034,7 +1121,7 @@ function OryFormOidcButtons() {
1034
1121
  "provider",
1035
1122
  node.attributes.value
1036
1123
  );
1037
- setValue("method", "oidc");
1124
+ setValue("method", node.group);
1038
1125
  }
1039
1126
  },
1040
1127
  k
@@ -1044,11 +1131,13 @@ function OryFormSocialButtonsForm() {
1044
1131
  const {
1045
1132
  flow: { ui }
1046
1133
  } = useOryFlow();
1047
- const filteredNodes = ui.nodes.filter((node) => node.group === "oidc");
1134
+ const filteredNodes = ui.nodes.filter(
1135
+ (node) => node.group === clientFetch.UiNodeGroupEnum.Saml || node.group === clientFetch.UiNodeGroupEnum.Oidc
1136
+ );
1048
1137
  if (filteredNodes.length === 0) {
1049
1138
  return null;
1050
1139
  }
1051
- return /* @__PURE__ */ jsxRuntime.jsx(OryFormProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(OryForm, { children: /* @__PURE__ */ jsxRuntime.jsx(OryFormOidcButtons, {}) }) });
1140
+ return /* @__PURE__ */ jsxRuntime.jsx(OryFormProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(OryForm, { "data-testid": `ory/form/methods/oidc-saml`, children: /* @__PURE__ */ jsxRuntime.jsx(OryFormOidcButtons, {}) }) });
1052
1141
  }
1053
1142
  function isUINodeGroupEnum(method) {
1054
1143
  return Object.values(clientFetch.UiNodeGroupEnum).includes(method);
@@ -1060,14 +1149,18 @@ function OryTwoStepCard() {
1060
1149
  const { ui } = flow;
1061
1150
  const nodeSorter = useNodeSorter();
1062
1151
  const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
1063
- const uniqueGroups = useNodesGroups(ui.nodes);
1064
- const options = Object.fromEntries(
1152
+ const groupsToShow = useNodesGroups(ui.nodes, {
1153
+ // We only want to render groups that have visible elements.
1154
+ omit: ["script", "input_hidden"]
1155
+ });
1156
+ const authMethodBlocks = Object.fromEntries(
1065
1157
  Object.values(clientFetch.UiNodeGroupEnum).filter((group) => {
1066
1158
  var _a2;
1067
- return (_a2 = uniqueGroups.groups[group]) == null ? void 0 : _a2.length;
1159
+ return (_a2 = groupsToShow.groups[group]) == null ? void 0 : _a2.length;
1068
1160
  }).filter(
1069
1161
  (group) => ![
1070
1162
  clientFetch.UiNodeGroupEnum.Oidc,
1163
+ clientFetch.UiNodeGroupEnum.Saml,
1071
1164
  clientFetch.UiNodeGroupEnum.Default,
1072
1165
  clientFetch.UiNodeGroupEnum.IdentifierFirst,
1073
1166
  clientFetch.UiNodeGroupEnum.Profile,
@@ -1075,7 +1168,17 @@ function OryTwoStepCard() {
1075
1168
  ].includes(group)
1076
1169
  ).map((g) => [g, {}])
1077
1170
  );
1078
- if (clientFetch.UiNodeGroupEnum.Code in options) {
1171
+ const authMethodAdditionalNodes = ui.nodes.filter(
1172
+ ({ group }) => [
1173
+ clientFetch.UiNodeGroupEnum.Oidc,
1174
+ clientFetch.UiNodeGroupEnum.Saml,
1175
+ clientFetch.UiNodeGroupEnum.Default,
1176
+ clientFetch.UiNodeGroupEnum.IdentifierFirst,
1177
+ clientFetch.UiNodeGroupEnum.Profile,
1178
+ clientFetch.UiNodeGroupEnum.Captcha
1179
+ ].includes(group)
1180
+ );
1181
+ if (clientFetch.UiNodeGroupEnum.Code in authMethodBlocks) {
1079
1182
  let identifier = (_b = (_a = findNode(ui.nodes, {
1080
1183
  group: "identifier_first",
1081
1184
  node_type: "input",
@@ -1087,7 +1190,7 @@ function OryTwoStepCard() {
1087
1190
  name: "address"
1088
1191
  })) == null ? void 0 : _c.attributes) == null ? void 0 : _d.value);
1089
1192
  if (identifier) {
1090
- options[clientFetch.UiNodeGroupEnum.Code] = {
1193
+ authMethodBlocks[clientFetch.UiNodeGroupEnum.Code] = {
1091
1194
  title: {
1092
1195
  id: "identities.messages.1010023",
1093
1196
  values: { address: identifier }
@@ -1095,8 +1198,8 @@ function OryTwoStepCard() {
1095
1198
  };
1096
1199
  }
1097
1200
  }
1098
- const nonOidcNodes = filterOidcOut(ui.nodes);
1099
- const finalNodes = formState.current === "method_active" ? getFinalNodes(uniqueGroups.groups, formState.method) : [];
1201
+ const nonSsoNodes = removeSsoNodes(ui.nodes);
1202
+ const finalNodes = formState.current === "method_active" ? getFinalNodes(groupsToShow.groups, formState.method) : [];
1100
1203
  const handleAfterFormSubmit = (method) => {
1101
1204
  if (typeof method !== "string" || !isUINodeGroupEnum(method)) {
1102
1205
  return;
@@ -1108,46 +1211,66 @@ function OryTwoStepCard() {
1108
1211
  });
1109
1212
  }
1110
1213
  };
1111
- const hasOidc = ui.nodes.some((node) => node.group === clientFetch.UiNodeGroupEnum.Oidc);
1112
- const showOidc = !(formState.current === "method_active" && formState.method !== "oidc");
1214
+ const hasSso = ui.nodes.some(
1215
+ (node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
1216
+ );
1217
+ const showSso = !(formState.current === "method_active" && !(formState.method === clientFetch.UiNodeGroupEnum.Oidc || formState.method === clientFetch.UiNodeGroupEnum.Saml));
1218
+ const showSsoDivider = hasSso && nonSsoNodes.filter((n) => {
1219
+ if (clientFetch.isUiNodeInputAttributes(n.attributes)) {
1220
+ return n.attributes.type !== clientFetch.UiNodeInputAttributesTypeEnum.Hidden;
1221
+ } else if (clientFetch.isUiNodeScriptAttributes(n.attributes)) {
1222
+ return false;
1223
+ }
1224
+ return true;
1225
+ }).length > 0;
1113
1226
  return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1114
1227
  /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1115
1228
  /* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
1116
1229
  /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1117
- showOidc && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1118
- /* @__PURE__ */ jsxRuntime.jsxs(OryForm, { onAfterSubmit: handleAfterFormSubmit, children: [
1119
- /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1120
- formState.current === "provide_identifier" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1121
- hasOidc && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1122
- nonOidcNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1123
- ] }),
1124
- formState.current === "select_method" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1125
- /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1126
- /* @__PURE__ */ jsxRuntime.jsx(
1127
- AuthMethodList,
1128
- {
1129
- options,
1130
- setSelectedGroup: (group) => dispatchFormState({
1131
- type: "action_select_method",
1132
- method: group
1133
- })
1134
- }
1135
- ),
1136
- ui.nodes.filter((n) => n.group === clientFetch.UiNodeGroupEnum.Captcha).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1137
- ] }),
1138
- formState.current === "method_active" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1139
- ui.nodes.filter((n) => n.type === "script").map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1140
- finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1141
- ] })
1142
- ] }),
1143
- /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1144
- ] })
1230
+ showSso && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
1231
+ /* @__PURE__ */ jsxRuntime.jsxs(
1232
+ OryForm,
1233
+ {
1234
+ "data-testid": `ory/form/methods/local`,
1235
+ onAfterSubmit: handleAfterFormSubmit,
1236
+ children: [
1237
+ formState.current === "provide_identifier" && /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1238
+ showSsoDivider && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1239
+ nonSsoNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1240
+ ] }),
1241
+ formState.current === "select_method" && /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1242
+ Object.entries(authMethodBlocks).length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1243
+ Object.entries(authMethodBlocks).length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
1244
+ AuthMethodList,
1245
+ {
1246
+ options: authMethodBlocks,
1247
+ setSelectedGroup: (group) => dispatchFormState({
1248
+ type: "action_select_method",
1249
+ method: group
1250
+ })
1251
+ }
1252
+ ),
1253
+ authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1254
+ ] }),
1255
+ formState.current === "method_active" && /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
1256
+ ui.nodes.filter(
1257
+ (n) => clientFetch.isUiNodeScriptAttributes(n.attributes) || n.group === clientFetch.UiNodeGroupEnum.Captcha
1258
+ ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1259
+ finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1260
+ ] }),
1261
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1262
+ ]
1263
+ }
1264
+ )
1145
1265
  ] })
1146
1266
  ] });
1147
1267
  }
1148
1268
  function AuthMethodList({ options, setSelectedGroup }) {
1149
1269
  const { Card } = useComponents();
1150
1270
  const { setValue, getValues } = reactHookForm.useFormContext();
1271
+ if (Object.entries(options).length === 0) {
1272
+ return null;
1273
+ }
1151
1274
  const handleClick = (group, options2) => {
1152
1275
  var _a, _b, _c, _d;
1153
1276
  if (isGroupImmediateSubmit(group)) {
@@ -1207,14 +1330,29 @@ function OryFormSectionInner({
1207
1330
  }
1208
1331
  );
1209
1332
  }
1333
+ function OryConsentCard() {
1334
+ const { Form, Card } = useComponents();
1335
+ const flow = useOryFlow();
1336
+ return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
1337
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
1338
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(OryForm, { children: [
1339
+ /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1340
+ /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: flow.flow.ui.nodes.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)) }),
1341
+ /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
1342
+ /* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
1343
+ ] }) })
1344
+ ] });
1345
+ }
1210
1346
  function OryFormGroupDivider() {
1211
1347
  const { Card } = useComponents();
1212
1348
  const {
1213
1349
  flow: { ui }
1214
1350
  } = useOryFlow();
1215
- const filteredNodes = ui.nodes.filter((node) => node.group === "oidc");
1351
+ const filteredNodes = ui.nodes.filter(
1352
+ (node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
1353
+ );
1216
1354
  const otherNodes = ui.nodes.filter(
1217
- (node) => node.group !== "oidc" && node.group !== "default"
1355
+ (node) => !(node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml) && node.group !== "default"
1218
1356
  );
1219
1357
  if (filteredNodes.length > 0 && otherNodes.length > 0) {
1220
1358
  return /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {});
@@ -1240,7 +1378,7 @@ function OrySettingsOidc({ nodes }) {
1240
1378
  onClick: () => {
1241
1379
  if (node.attributes.node_type === "input") {
1242
1380
  setValue("link", node.attributes.value);
1243
- setValue("method", "oidc");
1381
+ setValue("method", node.group);
1244
1382
  }
1245
1383
  }
1246
1384
  }));
@@ -1249,7 +1387,7 @@ function OrySettingsOidc({ nodes }) {
1249
1387
  onClick: () => {
1250
1388
  if (node.attributes.node_type === "input") {
1251
1389
  setValue("unlink", node.attributes.value);
1252
- setValue("method", "oidc");
1390
+ setValue("method", node.group);
1253
1391
  }
1254
1392
  }
1255
1393
  }));
@@ -1558,16 +1696,19 @@ function SettingsSectionContent({ group, nodes }) {
1558
1696
  const { Card } = useComponents();
1559
1697
  const intl = reactIntl.useIntl();
1560
1698
  const { flow } = useOryFlow();
1561
- const uniqueGroups = useNodesGroups(flow.ui.nodes);
1699
+ const groupedNodes = useNodesGroups(flow.ui.nodes, {
1700
+ // Script nodes are already handled by the parent component.
1701
+ omit: ["script"]
1702
+ });
1562
1703
  if (group === clientFetch.UiNodeGroupEnum.Totp) {
1563
1704
  return /* @__PURE__ */ jsxRuntime.jsxs(
1564
1705
  OryFormSection,
1565
1706
  {
1566
- nodes: uniqueGroups.groups.totp,
1707
+ nodes: groupedNodes.groups.totp,
1567
1708
  "data-testid": "ory/screen/settings/group/totp",
1568
1709
  children: [
1569
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsTotp, { nodes: (_a = uniqueGroups.groups.totp) != null ? _a : [] }),
1570
- (_b = uniqueGroups.groups.default) == null ? void 0 : _b.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1710
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsTotp, { nodes: (_a = groupedNodes.groups.totp) != null ? _a : [] }),
1711
+ (_b = groupedNodes.groups.default) == null ? void 0 : _b.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1571
1712
  ]
1572
1713
  }
1573
1714
  );
@@ -1576,16 +1717,16 @@ function SettingsSectionContent({ group, nodes }) {
1576
1717
  return /* @__PURE__ */ jsxRuntime.jsxs(
1577
1718
  OryFormSection,
1578
1719
  {
1579
- nodes: uniqueGroups.groups.lookup_secret,
1720
+ nodes: groupedNodes.groups.lookup_secret,
1580
1721
  "data-testid": "ory/screen/settings/group/lookup_secret",
1581
1722
  children: [
1582
1723
  /* @__PURE__ */ jsxRuntime.jsx(
1583
1724
  OrySettingsRecoveryCodes,
1584
1725
  {
1585
- nodes: (_c = uniqueGroups.groups.lookup_secret) != null ? _c : []
1726
+ nodes: (_c = groupedNodes.groups.lookup_secret) != null ? _c : []
1586
1727
  }
1587
1728
  ),
1588
- (_d = uniqueGroups.groups.default) == null ? void 0 : _d.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1729
+ (_d = groupedNodes.groups.default) == null ? void 0 : _d.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1589
1730
  ]
1590
1731
  }
1591
1732
  );
@@ -1594,11 +1735,11 @@ function SettingsSectionContent({ group, nodes }) {
1594
1735
  return /* @__PURE__ */ jsxRuntime.jsxs(
1595
1736
  OryFormSection,
1596
1737
  {
1597
- nodes: uniqueGroups.groups.oidc,
1738
+ nodes: groupedNodes.groups.oidc,
1598
1739
  "data-testid": "ory/screen/settings/group/oidc",
1599
1740
  children: [
1600
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsOidc, { nodes: (_e = uniqueGroups.groups.oidc) != null ? _e : [] }),
1601
- (_f = uniqueGroups.groups.default) == null ? void 0 : _f.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1741
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsOidc, { nodes: (_e = groupedNodes.groups.oidc) != null ? _e : [] }),
1742
+ (_f = groupedNodes.groups.default) == null ? void 0 : _f.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1602
1743
  ]
1603
1744
  }
1604
1745
  );
@@ -1607,11 +1748,11 @@ function SettingsSectionContent({ group, nodes }) {
1607
1748
  return /* @__PURE__ */ jsxRuntime.jsxs(
1608
1749
  OryFormSection,
1609
1750
  {
1610
- nodes: uniqueGroups.groups.webauthn,
1751
+ nodes: groupedNodes.groups.webauthn,
1611
1752
  "data-testid": "ory/screen/settings/group/webauthn",
1612
1753
  children: [
1613
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsWebauthn, { nodes: (_g = uniqueGroups.groups.webauthn) != null ? _g : [] }),
1614
- (_h = uniqueGroups.groups.default) == null ? void 0 : _h.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1754
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsWebauthn, { nodes: (_g = groupedNodes.groups.webauthn) != null ? _g : [] }),
1755
+ (_h = groupedNodes.groups.default) == null ? void 0 : _h.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1615
1756
  ]
1616
1757
  }
1617
1758
  );
@@ -1620,11 +1761,11 @@ function SettingsSectionContent({ group, nodes }) {
1620
1761
  return /* @__PURE__ */ jsxRuntime.jsxs(
1621
1762
  OryFormSection,
1622
1763
  {
1623
- nodes: uniqueGroups.groups.passkey,
1764
+ nodes: groupedNodes.groups.passkey,
1624
1765
  "data-testid": "ory/screen/settings/group/passkey",
1625
1766
  children: [
1626
- /* @__PURE__ */ jsxRuntime.jsx(OrySettingsPasskey, { nodes: (_i = uniqueGroups.groups.passkey) != null ? _i : [] }),
1627
- (_j = uniqueGroups.groups.default) == null ? void 0 : _j.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1767
+ /* @__PURE__ */ jsxRuntime.jsx(OrySettingsPasskey, { nodes: (_i = groupedNodes.groups.passkey) != null ? _i : [] }),
1768
+ (_j = groupedNodes.groups.default) == null ? void 0 : _j.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
1628
1769
  ]
1629
1770
  }
1630
1771
  );
@@ -1645,7 +1786,7 @@ function SettingsSectionContent({ group, nodes }) {
1645
1786
  id: `settings.${group}.description`
1646
1787
  }),
1647
1788
  children: [
1648
- (_k = uniqueGroups.groups.default) == null ? void 0 : _k.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1789
+ (_k = groupedNodes.groups.default) == null ? void 0 : _k.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
1649
1790
  nodes.filter(
1650
1791
  (node) => "type" in node.attributes && node.attributes.type !== "submit"
1651
1792
  ).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
@@ -1659,16 +1800,16 @@ function SettingsSectionContent({ group, nodes }) {
1659
1800
  }
1660
1801
  );
1661
1802
  }
1662
- var getScriptNode = (nodes) => nodes.find(
1663
- (node) => "id" in node.attributes && node.attributes.id === "webauthn_script"
1803
+ var onlyScriptNodes = (nodes) => nodes.filter(
1804
+ (node) => clientFetch.isUiNodeScriptAttributes(node.attributes) && node.attributes.id === "webauthn_script"
1664
1805
  );
1665
1806
  function OrySettingsCard() {
1666
1807
  const { flow } = useOryFlow();
1667
- const uniqueGroups = useNodesGroups(flow.ui.nodes);
1668
- const scriptNode = getScriptNode(flow.ui.nodes);
1808
+ const uniqueGroups = useNodesGroups(flow.ui.nodes, { omit: ["script"] });
1809
+ const scriptNodes = onlyScriptNodes(flow.ui.nodes);
1669
1810
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1670
1811
  /* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
1671
- scriptNode && /* @__PURE__ */ jsxRuntime.jsx(Node, { node: scriptNode }),
1812
+ scriptNodes.map((n) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node: n })),
1672
1813
  uniqueGroups.entries.map(([group, nodes]) => {
1673
1814
  if (group === clientFetch.UiNodeGroupEnum.Default) {
1674
1815
  return null;
@@ -2003,7 +2144,27 @@ var en_default = {
2003
2144
  "property.phone": "phone",
2004
2145
  "property.username": "username",
2005
2146
  "property.identifier": "identifier",
2006
- "property.code": "code"
2147
+ "property.code": "code",
2148
+ "consent.title": "Authorize {party}",
2149
+ "consent.subtitle": "A third party application wants to access information associated with your account {identifier}.",
2150
+ "consent.scope.openid.title": "Identity",
2151
+ "consent.scope.openid.description": "Allows the application to verify your identity. This is required for authentication and a trusted login experience.",
2152
+ "consent.scope.offline_access.title": "Offline Access",
2153
+ "consent.scope.offline_access.description": "Allows this application to keep you signed in even when you're not actively using it.",
2154
+ "consent.scope.profile.title": "Profile Information",
2155
+ "consent.scope.profile.description": "Allows access to your basic profile details, including your username, first name, and last name.",
2156
+ "consent.scope.email.title": "Email Address",
2157
+ "consent.scope.email.description": "Retrieve your email address and its verification status.",
2158
+ "consent.scope.address.title": "Physical Address",
2159
+ "consent.scope.address.description": "Access your postal address.",
2160
+ "consent.scope.phone.title": "Phone Number",
2161
+ "consent.scope.phone.description": "Retrieve your phone number and its verification status.",
2162
+ "error.title.what-happened": "What happened?",
2163
+ "error.title.what-can-i-do": "What can I do?",
2164
+ "error.instructions": "Please try again in a few minutes or contact the website operator.",
2165
+ "error.footer.text": "When reporting this error, please include the following information:",
2166
+ "error.footer.copy": "Copy",
2167
+ "error.action.go-back": "Go back"
2007
2168
  };
2008
2169
 
2009
2170
  // src/locales/de.json
@@ -2174,7 +2335,7 @@ var de_default = {
2174
2335
  "two-step.code.description": "Ein Best\xE4tigungscode wird an Ihre E-Mail gesendet.",
2175
2336
  "two-step.code.title": "E-Mail-Code",
2176
2337
  "two-step.passkey.description": "Verwenden Sie die Fingerabdruck- oder Gesichtserkennung Ihres Ger\xE4ts",
2177
- "two-step.passkey.title": "Passwort (empfohlen)",
2338
+ "two-step.passkey.title": "Passkey (empfohlen)",
2178
2339
  "two-step.password.description": "Geben Sie Ihr Passwort ein, das mit Ihrem Konto verkn\xFCpft ist",
2179
2340
  "two-step.password.title": "Passwort",
2180
2341
  "two-step.webauthn.title": "Sicherheitsschl\xFCssel",
@@ -2268,7 +2429,27 @@ var de_default = {
2268
2429
  "property.password": "Passwort",
2269
2430
  "property.phone": "Telefon",
2270
2431
  "property.code": "Code",
2271
- "property.username": "Benutzername"
2432
+ "property.username": "Benutzername",
2433
+ "consent.title": "Autorisieren {party}",
2434
+ "consent.subtitle": "Eine Drittanbieteranwendung m\xF6chte auf Informationen zugreifen, die mit Ihrem Konto {identifier} verkn\xFCpft sind.",
2435
+ "consent.scope.openid.title": "Identit\xE4t",
2436
+ "consent.scope.openid.description": "Erm\xF6glicht der Anwendung, Ihre Identit\xE4t zu \xFCberpr\xFCfen. Dies ist f\xFCr die Authentifizierung und eine vertrauensw\xFCrdige Login-Erfahrung erforderlich.",
2437
+ "consent.scope.offline_access.title": "Offline-Zugriff",
2438
+ "consent.scope.offline_access.description": "Erm\xF6glicht dieser Anwendung, Sie angemeldet zu lassen, auch wenn Sie sie nicht aktiv nutzen.",
2439
+ "consent.scope.profile.title": "Profilinformationen",
2440
+ "consent.scope.profile.description": "Erm\xF6glicht den Zugriff auf Ihre grundlegenden Profildetails, einschlie\xDFlich Ihres Benutzernamens, Vornamens und Nachnamens.",
2441
+ "consent.scope.email.title": "E-Mail-Adresse",
2442
+ "consent.scope.email.description": "Erm\xF6glicht den Abruf Ihrer E-Mail-Adresse und deren \xDCberpr\xFCfungsstatus.",
2443
+ "consent.scope.address.title": "Physische Adresse",
2444
+ "consent.scope.address.description": "Erm\xF6glicht den Zugriff auf Ihre Postanschrift.",
2445
+ "consent.scope.phone.title": "Telefonnummer",
2446
+ "consent.scope.phone.description": "Erm\xF6glicht den Abruf Ihrer Telefonnummer und deren \xDCberpr\xFCfungsstatus.",
2447
+ "error.title.what-happened": "Was ist passiert?",
2448
+ "error.footer.copy": "Kopieren",
2449
+ "error.footer.text": "Bitte f\xFCgen Sie bei der Meldung dieses Fehlers die folgenden Informationen hinzu:",
2450
+ "error.instructions": "Bitte versuchen Sie es in wenigen Minuten erneut oder wenden Sie sich an den Website-Betreiber.",
2451
+ "error.title.what-can-i-do": "Was kann ich tun?",
2452
+ "error.action.go-back": "Zur\xFCck"
2272
2453
  };
2273
2454
 
2274
2455
  // src/locales/es.json
@@ -2284,7 +2465,7 @@ var es_default = {
2284
2465
  "error.back-button": "Regresar",
2285
2466
  "error.description": "Ocurri\xF3 un error con el siguiente mensaje:",
2286
2467
  "error.support-email-link": "Si el problema persiste, por favor contacte a <a>{contactSupportEmail}</a>",
2287
- "error.title": "Ocurri\xF3 un error",
2468
+ "error.title": "",
2288
2469
  "error.title-internal-server-error": "Error Interno del Servidor",
2289
2470
  "error.title-not-found": "404 - P\xE1gina no encontrada",
2290
2471
  "identities.messages.1010001": "Iniciar sesi\xF3n",
@@ -2533,7 +2714,27 @@ var es_default = {
2533
2714
  "property.identifier": "",
2534
2715
  "property.password": "",
2535
2716
  "property.phone": "",
2536
- "property.username": ""
2717
+ "property.username": "",
2718
+ "consent.title": "Autorizar {party}",
2719
+ "consent.subtitle": "Una aplicaci\xF3n de terceros quiere acceder a la informaci\xF3n asociada a su cuenta {identifier}.",
2720
+ "consent.scope.openid.title": "Identidad",
2721
+ "consent.scope.openid.description": "Permite que la aplicaci\xF3n verifique su identidad. Esto es necesario para la autenticaci\xF3n y una experiencia de inicio de sesi\xF3n confiable.",
2722
+ "consent.scope.offline_access.title": "Acceso sin conexi\xF3n",
2723
+ "consent.scope.offline_access.description": "Permite que esta aplicaci\xF3n le mantenga conectado incluso cuando no la est\xE9 utilizando activamente.",
2724
+ "consent.scope.profile.title": "Informaci\xF3n del perfil",
2725
+ "consent.scope.profile.description": "Permite el acceso a los detalles b\xE1sicos de su perfil, incluyendo su nombre de usuario, nombre y apellido.",
2726
+ "consent.scope.email.title": "Direcci\xF3n de correo electr\xF3nico",
2727
+ "consent.scope.email.description": "Recupere su direcci\xF3n de correo electr\xF3nico y su estado de verificaci\xF3n.",
2728
+ "consent.scope.address.title": "Direcci\xF3n f\xEDsica",
2729
+ "consent.scope.address.description": "Acceda a su direcci\xF3n postal.",
2730
+ "consent.scope.phone.title": "N\xFAmero de tel\xE9fono",
2731
+ "consent.scope.phone.description": "Recupere su n\xFAmero de tel\xE9fono y su estado de verificaci\xF3n.",
2732
+ "error.action.go-back": "",
2733
+ "error.footer.copy": "",
2734
+ "error.footer.text": "",
2735
+ "error.instructions": "",
2736
+ "error.title.what-can-i-do": "",
2737
+ "error.title.what-happened": ""
2537
2738
  };
2538
2739
 
2539
2740
  // src/locales/fr.json
@@ -2798,7 +2999,27 @@ var fr_default = {
2798
2999
  "property.identifier": "",
2799
3000
  "property.password": "",
2800
3001
  "property.phone": "",
2801
- "property.username": ""
3002
+ "property.username": "",
3003
+ "consent.title": "Autoriser {party}",
3004
+ "consent.subtitle": "Une application tierce souhaite acc\xE9der aux informations associ\xE9es \xE0 votre compte {identifier}.",
3005
+ "consent.scope.openid.title": "Identit\xE9",
3006
+ "consent.scope.openid.description": "Permet \xE0 l'application de v\xE9rifier votre identit\xE9. Cela est n\xE9cessaire pour l'authentification et une exp\xE9rience de connexion fiable.",
3007
+ "consent.scope.offline_access.title": "Acc\xE8s hors ligne",
3008
+ "consent.scope.offline_access.description": "Permet \xE0 cette application de vous maintenir connect\xE9 m\xEAme lorsque vous ne l'utilisez pas activement.",
3009
+ "consent.scope.profile.title": "Informations de profil",
3010
+ "consent.scope.profile.description": "Permet l'acc\xE8s aux d\xE9tails de base de votre profil, y compris votre nom d'utilisateur, pr\xE9nom et nom.",
3011
+ "consent.scope.email.title": "Adresse e-mail",
3012
+ "consent.scope.email.description": "R\xE9cup\xE8re votre adresse e-mail et son statut de v\xE9rification.",
3013
+ "consent.scope.address.title": "Adresse physique",
3014
+ "consent.scope.address.description": "Acc\xE8de \xE0 votre adresse postale.",
3015
+ "consent.scope.phone.title": "Num\xE9ro de t\xE9l\xE9phone",
3016
+ "consent.scope.phone.description": "R\xE9cup\xE8re votre num\xE9ro de t\xE9l\xE9phone et son statut de v\xE9rification.",
3017
+ "error.action.go-back": "",
3018
+ "error.footer.copy": "",
3019
+ "error.footer.text": "",
3020
+ "error.title.what-can-i-do": "",
3021
+ "error.title.what-happened": "",
3022
+ "error.instructions": ""
2802
3023
  };
2803
3024
 
2804
3025
  // src/locales/nl.json
@@ -3063,7 +3284,27 @@ var nl_default = {
3063
3284
  "property.identifier": "",
3064
3285
  "property.password": "",
3065
3286
  "property.phone": "",
3066
- "property.username": ""
3287
+ "property.username": "",
3288
+ "consent.title": "Autoriseren {party}",
3289
+ "consent.subtitle": "Een derde partij applicatie wil toegang tot informatie die aan uw account {identifier} is gekoppeld.",
3290
+ "consent.scope.openid.title": "Identiteit",
3291
+ "consent.scope.openid.description": "Stelt de applicatie in staat uw identiteit te verifi\xEBren. Dit is vereist voor authenticatie en een betrouwbare inlogervaring.",
3292
+ "consent.scope.offline_access.title": "Offline toegang",
3293
+ "consent.scope.offline_access.description": "Stelt deze applicatie in staat u ingelogd te houden, zelfs wanneer u deze niet actief gebruikt.",
3294
+ "consent.scope.profile.title": "Profielinformatie",
3295
+ "consent.scope.profile.description": "Geeft toegang tot uw basisprofielgegevens, inclusief uw gebruikersnaam, voornaam en achternaam.",
3296
+ "consent.scope.email.title": "E-mailadres",
3297
+ "consent.scope.email.description": "Haal uw e-mailadres en de verificatiestatus ervan op.",
3298
+ "consent.scope.address.title": "Fysiek adres",
3299
+ "consent.scope.address.description": "Toegang tot uw postadres.",
3300
+ "consent.scope.phone.title": "Telefoonnummer",
3301
+ "consent.scope.phone.description": "Haal uw telefoonnummer en de verificatiestatus ervan op.",
3302
+ "error.action.go-back": "",
3303
+ "error.footer.copy": "",
3304
+ "error.footer.text": "",
3305
+ "error.title.what-can-i-do": "",
3306
+ "error.title.what-happened": "",
3307
+ "error.instructions": ""
3067
3308
  };
3068
3309
 
3069
3310
  // src/locales/pl.json
@@ -3328,7 +3569,27 @@ var pl_default = {
3328
3569
  "property.password": "",
3329
3570
  "property.phone": "",
3330
3571
  "property.username": "",
3331
- "property.identifier": ""
3572
+ "property.identifier": "",
3573
+ "consent.title": "Autoryzuj {party}",
3574
+ "consent.subtitle": "Aplikacja trzeciej strony chce uzyska\u0107 dost\u0119p do informacji powi\u0105zanych z Twoim kontem {identifier}.",
3575
+ "consent.scope.openid.title": "To\u017Csamo\u015B\u0107",
3576
+ "consent.scope.openid.description": "Pozwala aplikacji zweryfikowa\u0107 Twoj\u0105 to\u017Csamo\u015B\u0107. Jest to wymagane do uwierzytelniania i zapewnienia zaufanej sesji logowania.",
3577
+ "consent.scope.offline_access.title": "Dost\u0119p offline",
3578
+ "consent.scope.offline_access.description": "Pozwala aplikacji utrzyma\u0107 Twoje logowanie, nawet gdy nie korzystasz z niej aktywnie.",
3579
+ "consent.scope.profile.title": "Informacje profilowe",
3580
+ "consent.scope.profile.description": "Pozwala na dost\u0119p do podstawowych danych profilowych, w tym nazwy u\u017Cytkownika, imienia i nazwiska.",
3581
+ "consent.scope.email.title": "Adres e-mail",
3582
+ "consent.scope.email.description": "Pobierz sw\xF3j adres e-mail oraz status jego weryfikacji.",
3583
+ "consent.scope.address.title": "Adres fizyczny",
3584
+ "consent.scope.address.description": "Dost\u0119p do Twojego adresu pocztowego.",
3585
+ "consent.scope.phone.title": "Numer telefonu",
3586
+ "consent.scope.phone.description": "Pobierz sw\xF3j numer telefonu oraz status jego weryfikacji.",
3587
+ "error.action.go-back": "",
3588
+ "error.footer.copy": "",
3589
+ "error.footer.text": "",
3590
+ "error.title.what-can-i-do": "",
3591
+ "error.title.what-happened": "",
3592
+ "error.instructions": ""
3332
3593
  };
3333
3594
 
3334
3595
  // src/locales/pt.json
@@ -3593,7 +3854,27 @@ var pt_default = {
3593
3854
  "property.identifier": "",
3594
3855
  "property.password": "",
3595
3856
  "property.phone": "",
3596
- "property.username": ""
3857
+ "property.username": "",
3858
+ "consent.title": "Autorizar {party}",
3859
+ "consent.subtitle": "Um aplicativo de terceiros deseja acessar as informa\xE7\xF5es associadas \xE0 sua conta {identifier}.",
3860
+ "consent.scope.openid.title": "Identidade",
3861
+ "consent.scope.openid.description": "Permite que a aplica\xE7\xE3o verifique sua identidade. Isso \xE9 necess\xE1rio para a autentica\xE7\xE3o e uma experi\xEAncia de login confi\xE1vel.",
3862
+ "consent.scope.offline_access.title": "Acesso Offline",
3863
+ "consent.scope.offline_access.description": "Permite que este aplicativo mantenha voc\xEA conectado mesmo quando n\xE3o estiver usando-o ativamente.",
3864
+ "consent.scope.profile.title": "Informa\xE7\xF5es do Perfil",
3865
+ "consent.scope.profile.description": "Permite o acesso aos detalhes b\xE1sicos do seu perfil, incluindo seu nome de usu\xE1rio, primeiro nome e sobrenome.",
3866
+ "consent.scope.email.title": "Endere\xE7o de E-mail",
3867
+ "consent.scope.email.description": "Recupere seu endere\xE7o de e-mail e seu status de verifica\xE7\xE3o.",
3868
+ "consent.scope.address.title": "Endere\xE7o F\xEDsico",
3869
+ "consent.scope.address.description": "Acesse seu endere\xE7o postal.",
3870
+ "consent.scope.phone.title": "N\xFAmero de Telefone",
3871
+ "consent.scope.phone.description": "Recupere seu n\xFAmero de telefone e seu status de verifica\xE7\xE3o.",
3872
+ "error.action.go-back": "",
3873
+ "error.footer.copy": "",
3874
+ "error.footer.text": "",
3875
+ "error.title.what-can-i-do": "",
3876
+ "error.title.what-happened": "",
3877
+ "error.instructions": ""
3597
3878
  };
3598
3879
 
3599
3880
  // src/locales/sv.json
@@ -3858,7 +4139,27 @@ var sv_default = {
3858
4139
  "property.phone": "telefon",
3859
4140
  "property.username": "anv\xE4ndarnamn",
3860
4141
  "property.identifier": "identifier",
3861
- "property.code": "kod"
4142
+ "property.code": "kod",
4143
+ "consent.title": "Auktorisera {party}",
4144
+ "consent.subtitle": "En tredjepartsapplikation vill f\xE5 tillg\xE5ng till information kopplad till ditt konto {identifier}.",
4145
+ "consent.scope.openid.title": "Identitet",
4146
+ "consent.scope.openid.description": "G\xF6r det m\xF6jligt f\xF6r applikationen att verifiera din identitet. Detta kr\xE4vs f\xF6r autentisering och en p\xE5litlig inloggningsupplevelse.",
4147
+ "consent.scope.offline_access.title": "Offline-\xE5tkomst",
4148
+ "consent.scope.offline_access.description": "G\xF6r det m\xF6jligt f\xF6r denna applikation att h\xE5lla dig inloggad \xE4ven n\xE4r du inte aktivt anv\xE4nder den.",
4149
+ "consent.scope.profile.title": "Profilinformation",
4150
+ "consent.scope.profile.description": "Ger tillg\xE5ng till dina grundl\xE4ggande profiluppgifter, inklusive ditt anv\xE4ndarnamn, f\xF6rnamn och efternamn.",
4151
+ "consent.scope.email.title": "E-postadress",
4152
+ "consent.scope.email.description": "H\xE4mta din e-postadress och dess verifieringsstatus.",
4153
+ "consent.scope.address.title": "Fysisk adress",
4154
+ "consent.scope.address.description": "F\xE5 \xE5tkomst till din postadress.",
4155
+ "consent.scope.phone.title": "Telefonnummer",
4156
+ "consent.scope.phone.description": "H\xE4mta ditt telefonnummer och dess verifieringsstatus.",
4157
+ "error.action.go-back": "",
4158
+ "error.footer.copy": "",
4159
+ "error.footer.text": "",
4160
+ "error.title.what-can-i-do": "",
4161
+ "error.title.what-happened": "",
4162
+ "error.instructions": ""
3862
4163
  };
3863
4164
 
3864
4165
  // src/locales/index.ts
@@ -3879,6 +4180,7 @@ exports.OryCardContent = OryCardContent;
3879
4180
  exports.OryCardFooter = OryCardFooter;
3880
4181
  exports.OryCardHeader = OryCardHeader;
3881
4182
  exports.OryCardValidationMessages = OryCardValidationMessages;
4183
+ exports.OryConsentCard = OryConsentCard;
3882
4184
  exports.OryForm = OryForm;
3883
4185
  exports.OryFormGroupDivider = OryFormGroupDivider;
3884
4186
  exports.OryFormGroups = OryFormGroups;