@keycloak/keycloak-admin-ui 26.1.5 → 26.2.1

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.
Files changed (103) hide show
  1. package/README.md +4 -4
  2. package/lib/.vite/manifest.json +51 -30
  3. package/lib/{CreateFlow-CJuPGQV2.js → CreateFlow-C8ou3z3D.js} +9 -9
  4. package/lib/{CreateFlow-CJuPGQV2.js.map → CreateFlow-C8ou3z3D.js.map} +1 -1
  5. package/lib/{DetailOrganization-BZxym2fM.js → DetailOrganization-ChDFPj6w.js} +33 -33
  6. package/lib/{DetailOrganization-BZxym2fM.js.map → DetailOrganization-ChDFPj6w.js.map} +1 -1
  7. package/lib/{ExecutorForm-DxyNT3T5.js → ExecutorForm-CqhYZ9zD.js} +58 -57
  8. package/lib/ExecutorForm-CqhYZ9zD.js.map +1 -0
  9. package/lib/FlowDetails-BYnrUM6B.js +9025 -0
  10. package/lib/FlowDetails-BYnrUM6B.js.map +1 -0
  11. package/lib/NewOrganization-IjGiIFRg.js +36 -0
  12. package/lib/{NewOrganization-CdgyibqF.js.map → NewOrganization-IjGiIFRg.js.map} +1 -1
  13. package/lib/PermissionConfigurationDetails-B_xt8b5a.js +702 -0
  14. package/lib/PermissionConfigurationDetails-B_xt8b5a.js.map +1 -0
  15. package/lib/{PermissionDetails-lynVHdOa.js → PermissionDetails-FszJtVpG.js} +60 -60
  16. package/lib/{PermissionDetails-lynVHdOa.js.map → PermissionDetails-FszJtVpG.js.map} +1 -1
  17. package/lib/RealmSection-BkVmYRIb.js +179 -0
  18. package/lib/RealmSection-BkVmYRIb.js.map +1 -0
  19. package/lib/ResourceDetails-Br81AEgO.js +226 -0
  20. package/lib/ResourceDetails-Br81AEgO.js.map +1 -0
  21. package/lib/{ScopeDetails-plfHXCXz.js → ScopeDetails-nDvWwhgg.js} +35 -35
  22. package/lib/{ScopeDetails-plfHXCXz.js.map → ScopeDetails-nDvWwhgg.js.map} +1 -1
  23. package/lib/ScopePicker-kvjSuh0C.js +85 -0
  24. package/lib/ScopePicker-kvjSuh0C.js.map +1 -0
  25. package/lib/authentication/components/AuthenticationProviderContext.d.ts +9 -0
  26. package/lib/authentication/components/FlowRow.d.ts +1 -0
  27. package/lib/authentication/components/FlowTitle.d.ts +5 -2
  28. package/lib/clients/add/SamlSignature.d.ts +1 -0
  29. package/lib/clients/authorization/ScopePicker.d.ts +5 -2
  30. package/lib/clients/authorization/policy/LogicSelector.d.ts +1 -1
  31. package/lib/clients/authorization/policy/NameDescription.d.ts +3 -2
  32. package/lib/clients/routes/PermissionConfigurationDetails.d.ts +10 -0
  33. package/lib/components/client/ClientSelect.d.ts +4 -2
  34. package/lib/components/dynamic/BooleanComponent.d.ts +1 -1
  35. package/lib/components/dynamic/DynamicComponents.d.ts +2 -1
  36. package/lib/components/dynamic/FileComponent.d.ts +1 -1
  37. package/lib/components/dynamic/GroupComponent.d.ts +1 -1
  38. package/lib/components/dynamic/IntComponent.d.ts +1 -1
  39. package/lib/components/dynamic/ListComponent.d.ts +1 -1
  40. package/lib/components/dynamic/MapComponent.d.ts +1 -1
  41. package/lib/components/dynamic/MultivaluedListComponent.d.ts +1 -1
  42. package/lib/components/dynamic/MultivaluedStringComponent.d.ts +1 -1
  43. package/lib/components/dynamic/NumberComponent.d.ts +1 -1
  44. package/lib/components/dynamic/PasswordComponent.d.ts +1 -1
  45. package/lib/components/dynamic/RoleComponent.d.ts +1 -1
  46. package/lib/components/dynamic/ScriptComponent.d.ts +1 -1
  47. package/lib/components/dynamic/StringComponent.d.ts +1 -1
  48. package/lib/components/dynamic/TextComponent.d.ts +1 -1
  49. package/lib/components/dynamic/UserProfileAttributeListComponent.d.ts +1 -1
  50. package/lib/components/dynamic/components.d.ts +1 -0
  51. package/lib/components/form/CodeEditor.d.ts +12 -0
  52. package/lib/components/role-mapping/AddRoleMappingModal.d.ts +3 -2
  53. package/lib/components/users/UserSelect.d.ts +1 -1
  54. package/lib/context/RecentRealms.d.ts +6 -2
  55. package/lib/i18n/i18n.d.ts +4 -0
  56. package/lib/{index-lFXE1rYJ.js → index-CRHbhwXr.js} +36043 -36047
  57. package/lib/{index-lFXE1rYJ.js.map → index-CRHbhwXr.js.map} +1 -1
  58. package/lib/index.d.ts +1 -2
  59. package/lib/keycloak-admin-ui.css +1 -1
  60. package/lib/keycloak-admin-ui.js +162 -163
  61. package/lib/organizations/IdentityProviderSelect.d.ts +1 -1
  62. package/lib/permissions-configuration/PermissionsConfigurationSection.d.ts +1 -0
  63. package/lib/permissions-configuration/permission-configuration/AssignedPolicies.d.ts +10 -0
  64. package/lib/permissions-configuration/permission-configuration/AuthorizationScopesDetails.d.ts +10 -0
  65. package/lib/permissions-configuration/permission-configuration/ExistingPoliciesDialog.d.ts +10 -0
  66. package/lib/permissions-configuration/permission-configuration/NewPermissionConfigurationDialog.d.ts +8 -0
  67. package/lib/permissions-configuration/permission-configuration/NewPermissionPolicyDialog.d.ts +13 -0
  68. package/lib/permissions-configuration/permission-configuration/PermissionConfigurationDetails.d.ts +1 -0
  69. package/lib/permissions-configuration/permission-configuration/PermissionsConfigurationTab.d.ts +5 -0
  70. package/lib/permissions-configuration/permission-evaluation/PermissionEvaluationResult.d.ts +6 -0
  71. package/lib/permissions-configuration/permission-evaluation/PermissionsEvaluationTab.d.ts +8 -0
  72. package/lib/permissions-configuration/resource-types/GroupSelect.d.ts +7 -0
  73. package/lib/permissions-configuration/resource-types/ResourceType.d.ts +11 -0
  74. package/lib/permissions-configuration/resource-types/RoleSelect.d.ts +6 -0
  75. package/lib/permissions-configuration/resource-types/SearchDropdown.d.ts +20 -0
  76. package/lib/permissions-configuration/routes/NewPermissionConfiguration.d.ts +9 -0
  77. package/lib/permissions-configuration/routes/NewPermissionPolicy.d.ts +9 -0
  78. package/lib/permissions-configuration/routes/PermissionConfigurationDetails.d.ts +10 -0
  79. package/lib/permissions-configuration/routes/PermissionPolicyDetails.d.ts +10 -0
  80. package/lib/permissions-configuration/routes/PermissionsConfiguration.d.ts +7 -0
  81. package/lib/permissions-configuration/routes/PermissionsConfigurationTabs.d.ts +10 -0
  82. package/lib/permissions-configuration/routes/PermissionsPolicies.d.ts +8 -0
  83. package/lib/realm/RealmRoutes.d.ts +7 -0
  84. package/lib/realm/RealmSection.d.ts +5 -0
  85. package/lib/realm/add/NewRealmForm.d.ts +5 -1
  86. package/lib/realm-settings/themes/ThemesTab.d.ts +1 -0
  87. package/lib/utils/useIsFeatureEnabled.d.ts +2 -1
  88. package/lib/utils/useSortedResourceTypes.d.ts +5 -0
  89. package/package.json +26 -37
  90. package/lib/ExecutorForm-DxyNT3T5.js.map +0 -1
  91. package/lib/FlowDetails-ChnCh0MX.js +0 -10786
  92. package/lib/FlowDetails-ChnCh0MX.js.map +0 -1
  93. package/lib/NewOrganization-CdgyibqF.js +0 -36
  94. package/lib/ResourceDetails-BBY9AcKD.js +0 -286
  95. package/lib/ResourceDetails-BBY9AcKD.js.map +0 -1
  96. package/lib/browser-ponyfill-CTSSxZf6.js +0 -342
  97. package/lib/browser-ponyfill-CTSSxZf6.js.map +0 -1
  98. package/lib/components/realm-selector/RealmSelector.d.ts +0 -1
  99. package/lib/permissions/PermissionsSection.d.ts +0 -1
  100. package/lib/permissions/routes/Permissions.d.ts +0 -7
  101. package/lib/permissions/routes/PermissionsTabs.d.ts +0 -9
  102. package/lib/realm/routes/AddRealm.d.ts +0 -7
  103. /package/lib/{permissions → permissions-configuration}/routes.d.ts +0 -0
@@ -0,0 +1,179 @@
1
+ import { jsxs as u, Fragment as g, jsx as e } from "react/jsx-runtime";
2
+ import { aW as T, a as V, u as B, V as L, aa as W, aX as $, c as j, P as M, aY as H, aZ as D, a_ as J, a$ as k, b0 as U, b1 as X, af as f, B as Y, b2 as Z, b3 as _, b4 as q, I as S, J as K, K as O, O as v, b5 as z, e as G, b6 as Q } from "./index-CRHbhwXr.js";
3
+ import { useState as m } from "react";
4
+ import { useTranslation as p } from "react-i18next";
5
+ import { useNavigate as ee, Link as A } from "react-router-dom";
6
+ const te = () => {
7
+ const { t: n } = p(), [o, i] = m(!1), l = q();
8
+ return l.length < 3 ? null : /* @__PURE__ */ e(
9
+ S,
10
+ {
11
+ shouldFocusToggleOnSelect: !0,
12
+ onOpenChange: (t) => i(t),
13
+ toggle: (t) => /* @__PURE__ */ e(
14
+ v,
15
+ {
16
+ "data-testid": "kebab",
17
+ "aria-label": "Kebab toggle",
18
+ ref: t,
19
+ onClick: () => i(!o),
20
+ children: n("recentRealms")
21
+ }
22
+ ),
23
+ isOpen: o,
24
+ children: /* @__PURE__ */ e(K, { children: l.map(({ name: t }) => /* @__PURE__ */ e(
25
+ O,
26
+ {
27
+ component: (s) => /* @__PURE__ */ e(A, { ...s, to: k({ realm: t }) }),
28
+ children: t
29
+ },
30
+ "server info"
31
+ )) })
32
+ }
33
+ );
34
+ }, ae = ({ onClick: n, isDisabled: o }) => {
35
+ const { t: i } = p(), [l, t] = m(!1);
36
+ return /* @__PURE__ */ e(
37
+ S,
38
+ {
39
+ shouldFocusToggleOnSelect: !0,
40
+ onOpenChange: (s) => t(s),
41
+ toggle: (s) => /* @__PURE__ */ e(
42
+ v,
43
+ {
44
+ "data-testid": "kebab",
45
+ "aria-label": "Kebab toggle",
46
+ ref: s,
47
+ onClick: () => t(!l),
48
+ variant: "plain",
49
+ isDisabled: o,
50
+ children: /* @__PURE__ */ e(z, {})
51
+ }
52
+ ),
53
+ isOpen: l,
54
+ children: /* @__PURE__ */ e(K, { children: /* @__PURE__ */ e(
55
+ O,
56
+ {
57
+ "data-testid": "delete",
58
+ onClick: () => {
59
+ t(!1), n();
60
+ },
61
+ children: i("delete")
62
+ }
63
+ ) })
64
+ }
65
+ );
66
+ };
67
+ function ie() {
68
+ const { t: n } = p(), o = ee(), { whoAmI: i } = T(), { realm: l } = V(), { adminClient: t } = B(), { addAlert: s, addError: I } = L(), [c, h] = m([]), [N, b] = m(!1), [R, x] = m(0), C = () => x(R + 1), F = async (a, r, E) => {
69
+ try {
70
+ return (await Z(
71
+ t,
72
+ "ui-ext/realms/names",
73
+ { first: `${a}`, max: `${r}`, search: E || "" }
74
+ )).map((y) => ({ ...y, id: y.name }));
75
+ } catch (d) {
76
+ if (d instanceof _ && d.response.status < 500)
77
+ return [];
78
+ throw d;
79
+ }
80
+ }, [w, P] = W({
81
+ titleKey: n("deleteConfirmRealm", {
82
+ count: c.length,
83
+ name: c[0]?.name
84
+ }),
85
+ messageKey: "deleteConfirmRealmSetting",
86
+ continueButtonLabel: "delete",
87
+ onConfirm: async () => {
88
+ try {
89
+ c.filter(({ name: r }) => r === "master").length > 0 && s(n("cantDeleteMasterRealm"), G.warning);
90
+ const a = c.filter(({ name: r }) => r !== "master");
91
+ if (a.length === 0) return;
92
+ await Promise.all(
93
+ a.map(
94
+ ({ name: r }) => t.realms.del({ realm: r })
95
+ )
96
+ ), s(n("deletedSuccessRealmSetting")), c.filter(({ name: r }) => r === l).length > 0 && o(Q({ realm: "master" })), C(), h([]);
97
+ } catch (a) {
98
+ I("deleteError", a);
99
+ }
100
+ }
101
+ });
102
+ return /* @__PURE__ */ u(g, { children: [
103
+ /* @__PURE__ */ e(P, {}),
104
+ N && /* @__PURE__ */ e(
105
+ $,
106
+ {
107
+ onClose: () => {
108
+ b(!1), C();
109
+ }
110
+ }
111
+ ),
112
+ /* @__PURE__ */ e(j, { titleKey: "manageRealms", divider: !1 }),
113
+ /* @__PURE__ */ e(M, { variant: "light", className: "pf-v5-u-p-0", children: /* @__PURE__ */ e(
114
+ H,
115
+ {
116
+ loader: F,
117
+ isPaginated: !0,
118
+ onSelect: h,
119
+ canSelectAll: !0,
120
+ ariaLabelKey: "selectRealm",
121
+ searchPlaceholderKey: "search",
122
+ actions: [
123
+ {
124
+ title: n("delete"),
125
+ onRowClick: (a) => {
126
+ h([a]), w();
127
+ }
128
+ }
129
+ ],
130
+ toolbarItem: /* @__PURE__ */ u(g, { children: [
131
+ /* @__PURE__ */ e(f, { children: i.canCreateRealm() && /* @__PURE__ */ e(
132
+ Y,
133
+ {
134
+ onClick: () => b(!0),
135
+ "data-testid": "add-realm",
136
+ children: n("createRealm")
137
+ }
138
+ ) }),
139
+ /* @__PURE__ */ e(f, { children: /* @__PURE__ */ e(te, {}) }),
140
+ /* @__PURE__ */ e(f, { children: /* @__PURE__ */ e(
141
+ ae,
142
+ {
143
+ onClick: w,
144
+ isDisabled: c.length === 0
145
+ }
146
+ ) })
147
+ ] }),
148
+ columns: [
149
+ {
150
+ name: "name",
151
+ transforms: [D(20)],
152
+ cellRenderer: ({ name: a }) => a !== l ? /* @__PURE__ */ e(A, { to: k({ realm: a }), children: a }) : /* @__PURE__ */ e(
153
+ U,
154
+ {
155
+ bodyContent: n("currentRealmExplain"),
156
+ triggerAction: "hover",
157
+ children: /* @__PURE__ */ u(g, { children: [
158
+ a,
159
+ " ",
160
+ /* @__PURE__ */ e(X, { isRead: !0, children: n("currentRealm") })
161
+ ] })
162
+ }
163
+ )
164
+ },
165
+ {
166
+ name: "displayName",
167
+ transforms: [D(80)],
168
+ cellFormatters: [J(n)]
169
+ }
170
+ ]
171
+ },
172
+ R
173
+ ) })
174
+ ] });
175
+ }
176
+ export {
177
+ ie as default
178
+ };
179
+ //# sourceMappingURL=RealmSection-BkVmYRIb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealmSection-BkVmYRIb.js","sources":["../src/realm/RealmSection.tsx"],"sourcesContent":["import { NetworkError } from \"@keycloak/keycloak-admin-client\";\nimport { KeycloakDataTable, useAlerts } from \"@keycloak/keycloak-ui-shared\";\nimport {\n AlertVariant,\n Badge,\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n PageSection,\n Popover,\n ToolbarItem,\n} from \"@patternfly/react-core\";\nimport { EllipsisVIcon } from \"@patternfly/react-icons\";\nimport { cellWidth } from \"@patternfly/react-table\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { fetchAdminUI } from \"../context/auth/admin-ui-endpoint\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { useRecentRealms } from \"../context/RecentRealms\";\nimport { useWhoAmI } from \"../context/whoami/WhoAmI\";\nimport { translationFormatter } from \"../utils/translationFormatter\";\nimport NewRealmForm from \"./add/NewRealmForm\";\nimport { toRealm } from \"./RealmRoutes\";\nimport { toDashboard } from \"../dashboard/routes/Dashboard\";\n\nexport type RealmNameRepresentation = {\n name: string;\n displayName?: string;\n};\n\nconst RecentRealmsDropdown = () => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const recentRealms = useRecentRealms();\n\n if (recentRealms.length < 3) return null;\n return (\n <Dropdown\n shouldFocusToggleOnSelect\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid=\"kebab\"\n aria-label=\"Kebab toggle\"\n ref={ref}\n onClick={() => setOpen(!open)}\n >\n {t(\"recentRealms\")}\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>\n {recentRealms.map(({ name }) => (\n <DropdownItem\n key=\"server info\"\n component={(props) => (\n <Link {...props} to={toDashboard({ realm: name })} />\n )}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n );\n};\n\ntype KebabDropdownProps = {\n onClick: () => void;\n isDisabled?: boolean;\n};\n\nconst KebabDropdown = ({ onClick, isDisabled }: KebabDropdownProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n return (\n <Dropdown\n shouldFocusToggleOnSelect\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid=\"kebab\"\n aria-label=\"Kebab toggle\"\n ref={ref}\n onClick={() => setOpen(!open)}\n variant=\"plain\"\n isDisabled={isDisabled}\n >\n <EllipsisVIcon />\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"delete\"\n onClick={() => {\n setOpen(false);\n onClick();\n }}\n >\n {t(\"delete\")}\n </DropdownItem>\n </DropdownList>\n </Dropdown>\n );\n};\n\ntype RealmRow = RealmNameRepresentation & { id: string };\n\nexport default function RealmSection() {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { whoAmI } = useWhoAmI();\n const { realm } = useRealm();\n const { adminClient } = useAdminClient();\n const { addAlert, addError } = useAlerts();\n\n const [selected, setSelected] = useState<RealmRow[]>([]);\n const [openNewRealm, setOpenNewRealm] = useState(false);\n const [key, setKey] = useState(0);\n const refresh = () => setKey(key + 1);\n\n const loader = async (first?: number, max?: number, search?: string) => {\n try {\n const result = await fetchAdminUI<RealmNameRepresentation[]>(\n adminClient,\n \"ui-ext/realms/names\",\n { first: `${first}`, max: `${max}`, search: search || \"\" },\n );\n return result.map((r) => ({ ...r, id: r.name }));\n } catch (error) {\n if (error instanceof NetworkError && error.response.status < 500) {\n return [];\n }\n\n throw error;\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: t(\"deleteConfirmRealm\", {\n count: selected.length,\n name: selected[0]?.name,\n }),\n messageKey: \"deleteConfirmRealmSetting\",\n continueButtonLabel: \"delete\",\n onConfirm: async () => {\n try {\n if (selected.filter(({ name }) => name === \"master\").length > 0) {\n addAlert(t(\"cantDeleteMasterRealm\"), AlertVariant.warning);\n }\n const filtered = selected.filter(({ name }) => name !== \"master\");\n if (filtered.length === 0) return;\n await Promise.all(\n filtered.map(({ name: realmName }) =>\n adminClient.realms.del({ realm: realmName }),\n ),\n );\n addAlert(t(\"deletedSuccessRealmSetting\"));\n if (selected.filter(({ name }) => name === realm).length > 0) {\n navigate(toRealm({ realm: \"master\" }));\n }\n refresh();\n setSelected([]);\n } catch (error) {\n addError(\"deleteError\", error);\n }\n },\n });\n\n return (\n <>\n <DeleteConfirm />\n {openNewRealm && (\n <NewRealmForm\n onClose={() => {\n setOpenNewRealm(false);\n refresh();\n }}\n />\n )}\n <ViewHeader titleKey=\"manageRealms\" divider={false} />\n <PageSection variant=\"light\" className=\"pf-v5-u-p-0\">\n <KeycloakDataTable\n key={key}\n loader={loader}\n isPaginated\n onSelect={setSelected}\n canSelectAll\n ariaLabelKey=\"selectRealm\"\n searchPlaceholderKey=\"search\"\n actions={[\n {\n title: t(\"delete\"),\n onRowClick: (selected) => {\n setSelected([selected]);\n toggleDeleteDialog();\n },\n },\n ]}\n toolbarItem={\n <>\n <ToolbarItem>\n {whoAmI.canCreateRealm() && (\n <Button\n onClick={() => setOpenNewRealm(true)}\n data-testid=\"add-realm\"\n >\n {t(\"createRealm\")}\n </Button>\n )}\n </ToolbarItem>\n <ToolbarItem>\n <RecentRealmsDropdown />\n </ToolbarItem>\n <ToolbarItem>\n <KebabDropdown\n onClick={toggleDeleteDialog}\n isDisabled={selected.length === 0}\n />\n </ToolbarItem>\n </>\n }\n columns={[\n {\n name: \"name\",\n transforms: [cellWidth(20)],\n cellRenderer: ({ name }) =>\n name !== realm ? (\n <Link to={toDashboard({ realm: name })}>{name}</Link>\n ) : (\n <Popover\n bodyContent={t(\"currentRealmExplain\")}\n triggerAction=\"hover\"\n >\n <>\n {name} <Badge isRead>{t(\"currentRealm\")}</Badge>\n </>\n </Popover>\n ),\n },\n {\n name: \"displayName\",\n transforms: [cellWidth(80)],\n cellFormatters: [translationFormatter(t)],\n },\n ]}\n />\n </PageSection>\n </>\n );\n}\n"],"names":["RecentRealmsDropdown","t","useTranslation","open","setOpen","useState","recentRealms","useRecentRealms","jsx","Dropdown","isOpen","ref","MenuToggle","DropdownList","name","DropdownItem","props","Link","toDashboard","KebabDropdown","onClick","isDisabled","EllipsisVIcon","RealmSection","navigate","useNavigate","whoAmI","useWhoAmI","realm","useRealm","adminClient","useAdminClient","addAlert","addError","useAlerts","selected","setSelected","openNewRealm","setOpenNewRealm","key","setKey","refresh","loader","first","max","search","fetchAdminUI","r","error","NetworkError","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","AlertVariant","filtered","realmName","toRealm","jsxs","Fragment","NewRealmForm","ViewHeader","PageSection","KeycloakDataTable","ToolbarItem","Button","cellWidth","Popover","Badge","translationFormatter"],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ import { jsxs as c, Fragment as y, jsx as a } from "react/jsx-runtime";
2
+ import { u as L, V as _, b as q, ao as E, ap as z, n as K, aa as M, aA as j, ar as O, c as U, K as G, P as Y, F as W, d as J, Y as i, at as A, aB as Q, a7 as w, aC as X, aD as Z, A as $, B as D, l as ee, ay as R, a3 as ae, aE as re, e as P, a2 as se } from "./index-CRHbhwXr.js";
3
+ import { useState as d } from "react";
4
+ import { useTranslation as te } from "react-i18next";
5
+ import { useNavigate as oe, Link as ne } from "react-router-dom";
6
+ import { S as le } from "./ScopePicker-kvjSuh0C.js";
7
+ function be() {
8
+ const { adminClient: o } = L(), { t: e } = te(), [m, C] = d(), [N, p] = d(), [b, F] = d(), { addAlert: h, addError: f } = _(), g = q({
9
+ mode: "onChange"
10
+ }), { setValue: H, handleSubmit: S } = g, { id: t, resourceId: s, realm: u } = E(), I = oe(), V = (r = {}) => {
11
+ se(r, H);
12
+ }, { hasAccess: T } = z(), v = !T("manage-authorization");
13
+ K(
14
+ () => Promise.all([
15
+ o.clients.findOne({ id: t }),
16
+ s ? o.clients.getResource({ id: t, resourceId: s }) : Promise.resolve(void 0),
17
+ s ? o.clients.listPermissionsByResource({ id: t, resourceId: s }) : Promise.resolve(void 0)
18
+ ]),
19
+ ([r, n, l]) => {
20
+ if (!r)
21
+ throw new Error(e("notFound"));
22
+ C(r), F(l), p(n), V(n);
23
+ },
24
+ []
25
+ );
26
+ const B = async (r) => {
27
+ const n = ae(r);
28
+ try {
29
+ if (s)
30
+ await o.clients.updateResource({ id: t, resourceId: s }, n);
31
+ else {
32
+ const l = await o.clients.createResource(
33
+ { id: t },
34
+ n
35
+ );
36
+ p(n), I(re({ realm: u, id: t, resourceId: l._id }));
37
+ }
38
+ h(
39
+ e((s ? "update" : "create") + "ResourceSuccess"),
40
+ P.success
41
+ );
42
+ } catch (l) {
43
+ f("resourceSaveError", l);
44
+ }
45
+ }, [k, x] = M({
46
+ titleKey: "deleteResource",
47
+ children: /* @__PURE__ */ c(y, { children: [
48
+ e("deleteResourceConfirm"),
49
+ b?.length !== 0 && /* @__PURE__ */ a(
50
+ j,
51
+ {
52
+ variant: "warning",
53
+ isInline: !0,
54
+ isPlain: !0,
55
+ title: e("deleteResourceWarning"),
56
+ className: "pf-v5-u-pt-lg",
57
+ children: /* @__PURE__ */ a("p", { className: "pf-v5-u-pt-xs", children: b?.map((r) => /* @__PURE__ */ a("strong", { className: "pf-v5-u-pr-md", children: r.name }, r.id)) })
58
+ }
59
+ )
60
+ ] }),
61
+ continueButtonLabel: "confirm",
62
+ onConfirm: async () => {
63
+ try {
64
+ await o.clients.delResource({
65
+ id: t,
66
+ resourceId: s
67
+ }), h(e("resourceDeletedSuccess"), P.success), I(R({ realm: u, clientId: t, tab: "resources" }));
68
+ } catch (r) {
69
+ f("resourceDeletedError", r);
70
+ }
71
+ }
72
+ });
73
+ return m ? /* @__PURE__ */ c(y, { children: [
74
+ /* @__PURE__ */ a(x, {}),
75
+ /* @__PURE__ */ a(
76
+ U,
77
+ {
78
+ titleKey: s ? N?.name : "createResource",
79
+ dropdownItems: s ? [
80
+ /* @__PURE__ */ a(
81
+ G,
82
+ {
83
+ "data-testid": "delete-resource",
84
+ isDisabled: v,
85
+ onClick: () => k(),
86
+ children: e("delete")
87
+ },
88
+ "delete"
89
+ )
90
+ ] : void 0
91
+ }
92
+ ),
93
+ /* @__PURE__ */ a(Y, { variant: "light", children: /* @__PURE__ */ a(W, { ...g, children: /* @__PURE__ */ c(
94
+ J,
95
+ {
96
+ isHorizontal: !0,
97
+ role: "manage-authorization",
98
+ className: "keycloak__resource-details__form",
99
+ onSubmit: S(B),
100
+ children: [
101
+ /* @__PURE__ */ a(
102
+ i,
103
+ {
104
+ name: s ? "owner.name" : "",
105
+ label: e("owner"),
106
+ labelIcon: e("ownerHelp"),
107
+ defaultValue: m.clientId,
108
+ readOnly: !0
109
+ }
110
+ ),
111
+ /* @__PURE__ */ a(
112
+ i,
113
+ {
114
+ name: "name",
115
+ label: e("name"),
116
+ labelIcon: e("resourceNameHelp"),
117
+ rules: { required: e("required") }
118
+ }
119
+ ),
120
+ /* @__PURE__ */ a(
121
+ i,
122
+ {
123
+ name: "displayName",
124
+ label: e("displayName"),
125
+ labelIcon: e("displayNameHelp"),
126
+ rules: { required: e("required") }
127
+ }
128
+ ),
129
+ /* @__PURE__ */ a(
130
+ i,
131
+ {
132
+ name: "type",
133
+ label: e("type"),
134
+ labelIcon: e("resourceDetailsTypeHelp")
135
+ }
136
+ ),
137
+ /* @__PURE__ */ a(
138
+ A,
139
+ {
140
+ label: e("uris"),
141
+ fieldId: "uris",
142
+ labelIcon: /* @__PURE__ */ a(w, { helpText: e("urisHelp"), fieldLabelId: "uris" }),
143
+ children: /* @__PURE__ */ a(
144
+ Q,
145
+ {
146
+ name: "uris",
147
+ type: "url",
148
+ "aria-label": e("uris"),
149
+ addButtonLabel: "addUri"
150
+ }
151
+ )
152
+ }
153
+ ),
154
+ /* @__PURE__ */ a(le, { clientId: t }),
155
+ /* @__PURE__ */ a(
156
+ i,
157
+ {
158
+ name: "icon_uri",
159
+ label: e("iconUri"),
160
+ labelIcon: e("iconUriHelp"),
161
+ type: "url"
162
+ }
163
+ ),
164
+ /* @__PURE__ */ a(
165
+ X,
166
+ {
167
+ name: "ownerManagedAccess",
168
+ label: e("ownerManagedAccess"),
169
+ labelIcon: e("ownerManagedAccessHelp")
170
+ }
171
+ ),
172
+ /* @__PURE__ */ a(
173
+ A,
174
+ {
175
+ hasNoPaddingTop: !0,
176
+ label: e("resourceAttribute"),
177
+ labelIcon: /* @__PURE__ */ a(
178
+ w,
179
+ {
180
+ helpText: e("resourceAttributeHelp"),
181
+ fieldLabelId: "resourceAttribute"
182
+ }
183
+ ),
184
+ fieldId: "resourceAttribute",
185
+ children: /* @__PURE__ */ a(Z, { name: "attributes", isDisabled: v })
186
+ }
187
+ ),
188
+ /* @__PURE__ */ a($, { children: /* @__PURE__ */ c("div", { className: "pf-v5-u-mt-md", children: [
189
+ /* @__PURE__ */ a(
190
+ D,
191
+ {
192
+ variant: ee.primary,
193
+ type: "submit",
194
+ "data-testid": "save",
195
+ children: e("save")
196
+ }
197
+ ),
198
+ /* @__PURE__ */ a(
199
+ D,
200
+ {
201
+ variant: "link",
202
+ "data-testid": "cancel",
203
+ component: (r) => /* @__PURE__ */ a(
204
+ ne,
205
+ {
206
+ ...r,
207
+ to: R({
208
+ realm: u,
209
+ clientId: t,
210
+ tab: "resources"
211
+ })
212
+ }
213
+ ),
214
+ children: e("cancel")
215
+ }
216
+ )
217
+ ] }) })
218
+ ]
219
+ }
220
+ ) }) })
221
+ ] }) : /* @__PURE__ */ a(O, {});
222
+ }
223
+ export {
224
+ be as default
225
+ };
226
+ //# sourceMappingURL=ResourceDetails-Br81AEgO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceDetails-Br81AEgO.js","sources":["../src/clients/authorization/ResourceDetails.tsx"],"sourcesContent":["import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type ResourceRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceRepresentation\";\nimport type ResourceServerRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceServerRepresentation\";\nimport {\n HelpItem,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Alert,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { DefaultSwitchControl } from \"../../components/SwitchControl\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeyValueInput } from \"../../components/key-value-form/KeyValueInput\";\nimport type { KeyValueType } from \"../../components/key-value-form/key-value-convert\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { MultiLineInput } from \"../../components/multi-line-input/MultiLineInput\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { convertFormValuesToObject, convertToFormValues } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport { ResourceDetailsParams, toResourceDetails } from \"../routes/Resource\";\nimport { ScopePicker } from \"./ScopePicker\";\nimport \"./resource-details.css\";\n\ntype SubmittedResource = Omit<\n ResourceRepresentation,\n \"attributes\" | \"scopes\"\n> & {\n attributes: KeyValueType[];\n};\n\nexport default function ResourceDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const [client, setClient] = useState<ClientRepresentation>();\n const [resource, setResource] = useState<ResourceRepresentation>();\n\n const [permissions, setPermission] =\n useState<ResourceServerRepresentation[]>();\n\n const { addAlert, addError } = useAlerts();\n const form = useForm<SubmittedResource>({\n mode: \"onChange\",\n });\n const { setValue, handleSubmit } = form;\n\n const { id, resourceId, realm } = useParams<ResourceDetailsParams>();\n const navigate = useNavigate();\n\n const setupForm = (resource: ResourceRepresentation = {}) => {\n convertToFormValues(resource, setValue);\n };\n\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n () =>\n Promise.all([\n adminClient.clients.findOne({ id }),\n resourceId\n ? adminClient.clients.getResource({ id, resourceId })\n : Promise.resolve(undefined),\n resourceId\n ? adminClient.clients.listPermissionsByResource({ id, resourceId })\n : Promise.resolve(undefined),\n ]),\n ([client, resource, permissions]) => {\n if (!client) {\n throw new Error(t(\"notFound\"));\n }\n setClient(client);\n setPermission(permissions);\n setResource(resource);\n setupForm(resource);\n },\n [],\n );\n\n const submit = async (submitted: SubmittedResource) => {\n const resource = convertFormValuesToObject<\n SubmittedResource,\n ResourceRepresentation\n >(submitted);\n\n try {\n if (resourceId) {\n await adminClient.clients.updateResource({ id, resourceId }, resource);\n } else {\n const result = await adminClient.clients.createResource(\n { id },\n resource,\n );\n setResource(resource);\n navigate(toResourceDetails({ realm, id, resourceId: result._id! }));\n }\n addAlert(\n t((resourceId ? \"update\" : \"create\") + \"ResourceSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"resourceSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deleteResource\",\n children: (\n <>\n {t(\"deleteResourceConfirm\")}\n {permissions?.length !== 0 && (\n <Alert\n variant=\"warning\"\n isInline\n isPlain\n title={t(\"deleteResourceWarning\")}\n className=\"pf-v5-u-pt-lg\"\n >\n <p className=\"pf-v5-u-pt-xs\">\n {permissions?.map((permission) => (\n <strong key={permission.id} className=\"pf-v5-u-pr-md\">\n {permission.name}\n </strong>\n ))}\n </p>\n </Alert>\n )}\n </>\n ),\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delResource({\n id,\n resourceId: resourceId!,\n });\n addAlert(t(\"resourceDeletedSuccess\"), AlertVariant.success);\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"resources\" }));\n } catch (error) {\n addError(\"resourceDeletedError\", error);\n }\n },\n });\n\n if (!client) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={resourceId ? resource?.name! : \"createResource\"}\n dropdownItems={\n resourceId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n className=\"keycloak__resource-details__form\"\n onSubmit={handleSubmit(submit)}\n >\n <TextControl\n name={resourceId ? \"owner.name\" : \"\"}\n label={t(\"owner\")}\n labelIcon={t(\"ownerHelp\")}\n defaultValue={client.clientId}\n readOnly\n />\n <TextControl\n name={\"name\"}\n label={t(\"name\")}\n labelIcon={t(\"resourceNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"displayNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"type\"\n label={t(\"type\")}\n labelIcon={t(\"resourceDetailsTypeHelp\")}\n />\n <FormGroup\n label={t(\"uris\")}\n fieldId=\"uris\"\n labelIcon={\n <HelpItem helpText={t(\"urisHelp\")} fieldLabelId=\"uris\" />\n }\n >\n <MultiLineInput\n name=\"uris\"\n type=\"url\"\n aria-label={t(\"uris\")}\n addButtonLabel=\"addUri\"\n />\n </FormGroup>\n <ScopePicker clientId={id} />\n <TextControl\n name=\"icon_uri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n type=\"url\"\n />\n <DefaultSwitchControl\n name=\"ownerManagedAccess\"\n label={t(\"ownerManagedAccess\")}\n labelIcon={t(\"ownerManagedAccessHelp\")}\n />\n <FormGroup\n hasNoPaddingTop\n label={t(\"resourceAttribute\")}\n labelIcon={\n <HelpItem\n helpText={t(\"resourceAttributeHelp\")}\n fieldLabelId=\"resourceAttribute\"\n />\n }\n fieldId=\"resourceAttribute\"\n >\n <KeyValueInput name=\"attributes\" isDisabled={isDisabled} />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"resources\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ResourceDetails","adminClient","useAdminClient","t","useTranslation","client","setClient","useState","resource","setResource","permissions","setPermission","addAlert","addError","useAlerts","form","useForm","setValue","handleSubmit","id","resourceId","realm","useParams","navigate","useNavigate","setupForm","convertToFormValues","hasAccess","useAccess","isDisabled","useFetch","submit","submitted","convertFormValuesToObject","result","toResourceDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","jsxs","Fragment","jsx","Alert","permission","toAuthorizationTab","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","FormGroup","HelpItem","MultiLineInput","ScopePicker","DefaultSwitchControl","KeyValueInput","ActionGroup","Button","ButtonVariant","props","Link","KeycloakSpinner"],"mappings":"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"}
@@ -1,18 +1,18 @@
1
1
  import { jsxs as c, Fragment as D, jsx as t } from "react/jsx-runtime";
2
- import { u as w, b9 as N, B as z, aH as F, b as H, n as k, br as C, bb as l, V as U, aG as B, P, F as V, c as j, q as d, A as q, d as m, h as x, e as E } from "./index-lFXE1rYJ.js";
3
- import { useState as T } from "react";
4
- import { useTranslation as G } from "react-i18next";
5
- import { useNavigate as K, Link as L } from "react-router-dom";
6
- function W() {
7
- const { adminClient: r } = w(), { t: e } = G(), { id: i, scopeId: o, realm: s } = N(), p = K(), { addAlert: S, addError: f } = z(), [v, u] = F(), [n, h] = T(), b = H({
2
+ import { u as w, ao as N, V as z, Q as F, b as k, n as C, aF as H, ay as l, c as U, K as V, P, F as x, d as B, Y as d, A as E, B as m, l as T, e as j } from "./index-CRHbhwXr.js";
3
+ import { useState as q } from "react";
4
+ import { useTranslation as K } from "react-i18next";
5
+ import { useNavigate as Y, Link as G } from "react-router-dom";
6
+ function R() {
7
+ const { adminClient: r } = w(), { t: e } = K(), { id: o, scopeId: i, realm: s } = N(), p = Y(), { addAlert: b, addError: v } = z(), [f, u] = F(), [n, h] = q(), g = k({
8
8
  mode: "onChange"
9
- }), { reset: g, handleSubmit: y } = b;
10
- k(
9
+ }), { reset: S, handleSubmit: y } = g;
10
+ C(
11
11
  async () => {
12
- if (o) {
12
+ if (i) {
13
13
  const a = await r.clients.getAuthorizationScope({
14
- id: i,
15
- scopeId: o
14
+ id: o,
15
+ scopeId: i
16
16
  });
17
17
  if (!a)
18
18
  throw new Error(e("notFound"));
@@ -20,48 +20,48 @@ function W() {
20
20
  }
21
21
  },
22
22
  (a) => {
23
- h(a), g({ ...a });
23
+ h(a), S({ ...a });
24
24
  },
25
25
  []
26
26
  );
27
27
  const A = async (a) => {
28
28
  try {
29
- o ? (await r.clients.updateAuthorizationScope(
30
- { id: i, scopeId: o },
29
+ i ? (await r.clients.updateAuthorizationScope(
30
+ { id: o, scopeId: i },
31
31
  a
32
32
  ), h(a)) : (await r.clients.createAuthorizationScope(
33
- { id: i },
33
+ { id: o },
34
34
  {
35
35
  name: a.name,
36
36
  displayName: a.displayName,
37
37
  iconUri: a.iconUri
38
38
  }
39
- ), p(l({ realm: s, clientId: i, tab: "scopes" }))), S(
40
- e((o ? "update" : "create") + "ScopeSuccess"),
41
- E.success
39
+ ), p(l({ realm: s, clientId: o, tab: "scopes" }))), b(
40
+ e((i ? "update" : "create") + "ScopeSuccess"),
41
+ j.success
42
42
  );
43
43
  } catch (I) {
44
- f("scopeSaveError", I);
44
+ v("scopeSaveError", I);
45
45
  }
46
46
  };
47
47
  return /* @__PURE__ */ c(D, { children: [
48
48
  /* @__PURE__ */ t(
49
- C,
49
+ H,
50
50
  {
51
- clientId: i,
52
- open: v,
51
+ clientId: o,
52
+ open: f,
53
53
  toggleDialog: u,
54
54
  selectedScope: n,
55
- refresh: () => p(l({ realm: s, clientId: i, tab: "scopes" }))
55
+ refresh: () => p(l({ realm: s, clientId: o, tab: "scopes" }))
56
56
  }
57
57
  ),
58
58
  /* @__PURE__ */ t(
59
59
  U,
60
60
  {
61
- titleKey: o ? n?.name : e("createAuthorizationScope"),
62
- dropdownItems: o ? [
61
+ titleKey: i ? n?.name : e("createAuthorizationScope"),
62
+ dropdownItems: i ? [
63
63
  /* @__PURE__ */ t(
64
- B,
64
+ V,
65
65
  {
66
66
  "data-testid": "delete-resource",
67
67
  onClick: () => u(),
@@ -72,8 +72,8 @@ function W() {
72
72
  ] : void 0
73
73
  }
74
74
  ),
75
- /* @__PURE__ */ t(P, { variant: "light", children: /* @__PURE__ */ t(V, { ...b, children: /* @__PURE__ */ c(
76
- j,
75
+ /* @__PURE__ */ t(P, { variant: "light", children: /* @__PURE__ */ t(x, { ...g, children: /* @__PURE__ */ c(
76
+ B,
77
77
  {
78
78
  isHorizontal: !0,
79
79
  role: "manage-authorization",
@@ -104,11 +104,11 @@ function W() {
104
104
  labelIcon: e("iconUriHelp")
105
105
  }
106
106
  ),
107
- /* @__PURE__ */ t(q, { children: /* @__PURE__ */ c("div", { className: "pf-v5-u-mt-md", children: [
107
+ /* @__PURE__ */ t(E, { children: /* @__PURE__ */ c("div", { className: "pf-v5-u-mt-md", children: [
108
108
  /* @__PURE__ */ t(
109
109
  m,
110
110
  {
111
- variant: x.primary,
111
+ variant: T.primary,
112
112
  type: "submit",
113
113
  "data-testid": "save",
114
114
  children: e("save")
@@ -119,7 +119,7 @@ function W() {
119
119
  {
120
120
  variant: "link",
121
121
  "data-testid": "revert",
122
- onClick: () => g({ ...n }),
122
+ onClick: () => S({ ...n }),
123
123
  children: e("revert")
124
124
  }
125
125
  ) : /* @__PURE__ */ t(
@@ -128,12 +128,12 @@ function W() {
128
128
  variant: "link",
129
129
  "data-testid": "cancel",
130
130
  component: (a) => /* @__PURE__ */ t(
131
- L,
131
+ G,
132
132
  {
133
133
  ...a,
134
134
  to: l({
135
135
  realm: s,
136
- clientId: i,
136
+ clientId: o,
137
137
  tab: "scopes"
138
138
  })
139
139
  }
@@ -148,6 +148,6 @@ function W() {
148
148
  ] });
149
149
  }
150
150
  export {
151
- W as default
151
+ R as default
152
152
  };
153
- //# sourceMappingURL=ScopeDetails-plfHXCXz.js.map
153
+ //# sourceMappingURL=ScopeDetails-nDvWwhgg.js.map