@keycloak/keycloak-admin-ui 26.5.7 → 26.6.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 (84) hide show
  1. package/lib/.vite/manifest.json +40 -40
  2. package/lib/{AddJWTAuthorizationGrant-B9fNafs-.js → AddJWTAuthorizationGrant-DggEcajP.js} +19 -19
  3. package/lib/{AddJWTAuthorizationGrant-B9fNafs-.js.map → AddJWTAuthorizationGrant-DggEcajP.js.map} +1 -1
  4. package/lib/{AddKubernetesConnect-_-fIYkCu.js → AddKubernetesConnect-AQAlLilK.js} +13 -13
  5. package/lib/{AddKubernetesConnect-_-fIYkCu.js.map → AddKubernetesConnect-AQAlLilK.js.map} +1 -1
  6. package/lib/{AddOAuth2-GWdhXpZu.js → AddOAuth2-Cvt6UqvN.js} +12 -12
  7. package/lib/{AddOAuth2-GWdhXpZu.js.map → AddOAuth2-Cvt6UqvN.js.map} +1 -1
  8. package/lib/{AddSpiffeConnect-CEycf6Um.js → AddSpiffeConnect-CMbuTxDv.js} +9 -9
  9. package/lib/{AddSpiffeConnect-CEycf6Um.js.map → AddSpiffeConnect-CMbuTxDv.js.map} +1 -1
  10. package/lib/{CreateFlow-C1gSi1GV.js → CreateFlow-D9CRBXWA.js} +10 -10
  11. package/lib/{CreateFlow-C1gSi1GV.js.map → CreateFlow-D9CRBXWA.js.map} +1 -1
  12. package/lib/DetailOrganization-qajGTP2J.js +204 -0
  13. package/lib/DetailOrganization-qajGTP2J.js.map +1 -0
  14. package/lib/{ExecutorForm-D3r69dqU.js → ExecutorForm-SQ60i4SS.js} +17 -17
  15. package/lib/{ExecutorForm-D3r69dqU.js.map → ExecutorForm-SQ60i4SS.js.map} +1 -1
  16. package/lib/{FlowDetails-DNNCBfY5.js → FlowDetails-Dar5JSR9.js} +1998 -2039
  17. package/lib/FlowDetails-Dar5JSR9.js.map +1 -0
  18. package/lib/NewOrganization-BR0Y1alV.js +36 -0
  19. package/lib/{NewOrganization-KSp9gXMo.js.map → NewOrganization-BR0Y1alV.js.map} +1 -1
  20. package/lib/{PermissionConfigurationDetails-LVkEXehk.js → PermissionConfigurationDetails-C8p0L73A.js} +118 -118
  21. package/lib/{PermissionConfigurationDetails-LVkEXehk.js.map → PermissionConfigurationDetails-C8p0L73A.js.map} +1 -1
  22. package/lib/{PermissionDetails-DlPJ8m6r.js → PermissionDetails-BtrNut1J.js} +79 -79
  23. package/lib/{PermissionDetails-DlPJ8m6r.js.map → PermissionDetails-BtrNut1J.js.map} +1 -1
  24. package/lib/{RealmSection-BKt0CL1J.js → RealmSection-BmJKY4J5.js} +26 -26
  25. package/lib/{RealmSection-BKt0CL1J.js.map → RealmSection-BmJKY4J5.js.map} +1 -1
  26. package/lib/{ResourceDetails-CV230nyS.js → ResourceDetails-DGFp4XHH.js} +36 -36
  27. package/lib/ResourceDetails-DGFp4XHH.js.map +1 -0
  28. package/lib/{ScopeDetails-BleAAOMS.js → ScopeDetails-MYU1xSd-.js} +27 -27
  29. package/lib/{ScopeDetails-BleAAOMS.js.map → ScopeDetails-MYU1xSd-.js.map} +1 -1
  30. package/lib/{ScopePicker-BpZ35vej.js → ScopePicker-CUxosMFa.js} +15 -15
  31. package/lib/{ScopePicker-BpZ35vej.js.map → ScopePicker-CUxosMFa.js.map} +1 -1
  32. package/lib/WorkflowDetailForm-BBfpdCqJ.js +147 -0
  33. package/lib/WorkflowDetailForm-BBfpdCqJ.js.map +1 -0
  34. package/lib/{WorkflowsSection-C6tPZTDa.js → WorkflowsSection-2CItPOxl.js} +20 -20
  35. package/lib/{WorkflowsSection-C6tPZTDa.js.map → WorkflowsSection-2CItPOxl.js.map} +1 -1
  36. package/lib/client-scopes/details/oid4vciAttributes.d.ts +4 -0
  37. package/lib/clients/keys/Certificate.d.ts +3 -1
  38. package/lib/components/dynamic/MapComponent.d.ts +1 -1
  39. package/lib/components/key-value-form/KeyValueInput.d.ts +4 -1
  40. package/lib/components/realm-loa-mapping/RealmLoAMapping.d.ts +13 -0
  41. package/lib/components/role-mapping/queries.d.ts +1 -2
  42. package/lib/components/role-mapping/resource.d.ts +33 -0
  43. package/lib/components/view-header/ViewHeader.d.ts +2 -1
  44. package/lib/context/auth/admin-ui-endpoint.d.ts +1 -0
  45. package/lib/context/group-resource/GroupResourceContext.d.ts +9 -0
  46. package/lib/groups/GroupsSection.d.ts +3 -1
  47. package/lib/groups/MembersModal.d.ts +5 -1
  48. package/lib/groups/MembershipsModal.d.ts +2 -1
  49. package/lib/groups/routes/Groups.d.ts +3 -0
  50. package/lib/help-urls.d.ts +1 -0
  51. package/lib/i18n/constants.d.ts +1 -0
  52. package/lib/i18n/i18n.d.ts +0 -1
  53. package/lib/{index-D3mEQ9NL.js → index-DpeGkKiN.js} +44586 -35237
  54. package/lib/{index-D3mEQ9NL.js.map → index-DpeGkKiN.js.map} +1 -1
  55. package/lib/index.d.ts +6 -4
  56. package/lib/keycloak-admin-ui.css +1 -1
  57. package/lib/keycloak-admin-ui.js +298 -294
  58. package/lib/organizations/routes/EditOrganization.d.ts +1 -1
  59. package/lib/realm-settings/routes/ThemesTab.d.ts +1 -1
  60. package/lib/realm-settings/themes/BackgroundContext.d.ts +9 -0
  61. package/lib/realm-settings/themes/ColorControl.d.ts +8 -0
  62. package/lib/realm-settings/themes/DefaultColorAccordion.d.ts +7 -0
  63. package/lib/realm-settings/themes/FileNameDialog.d.ts +1 -1
  64. package/lib/realm-settings/themes/LoginPreviewWindow.d.ts +5 -0
  65. package/lib/realm-settings/themes/LoginThemeProperties.d.ts +63 -0
  66. package/lib/realm-settings/themes/PatternflyVars.d.ts +29 -8
  67. package/lib/realm-settings/themes/QuickTheme.d.ts +17 -0
  68. package/lib/realm-settings/themes/ThemeColors.d.ts +3 -3
  69. package/lib/realm-settings/themes/ThemesTab.d.ts +0 -6
  70. package/lib/realm-settings/themes/UploadJar.d.ts +1 -1
  71. package/lib/realm-settings/themes/fileUtils.d.ts +1 -0
  72. package/lib/user/UserWorkflows.d.ts +5 -0
  73. package/lib/user/routes/User.d.ts +1 -1
  74. package/lib/user/utils/user-profile.d.ts +10 -0
  75. package/lib/utils/useIsFeatureEnabled.d.ts +4 -1
  76. package/package.json +10 -10
  77. package/lib/DetailOrganization-CV52xkX3.js +0 -194
  78. package/lib/DetailOrganization-CV52xkX3.js.map +0 -1
  79. package/lib/FlowDetails-DNNCBfY5.js.map +0 -1
  80. package/lib/NewOrganization-KSp9gXMo.js +0 -36
  81. package/lib/ResourceDetails-CV230nyS.js.map +0 -1
  82. package/lib/WorkflowDetailForm-CH1O9UEB.js +0 -4938
  83. package/lib/WorkflowDetailForm-CH1O9UEB.js.map +0 -1
  84. package/lib/theme/login.css +0 -94
@@ -1,10 +1,10 @@
1
1
  import { jsxs as r, Fragment as w, jsx as t } from "react/jsx-runtime";
2
- import { u as h, a as F, _ as b, b as v, V as y, P as g, F as S, c as A, N as C, U as I, A as T, e as H, B as N, t as P, d as i, f as V } from "./index-D3mEQ9NL.js";
3
- import { useTranslation as k } from "react-i18next";
4
- import { useNavigate as x, Link as B } from "react-router-dom";
2
+ import { u as h, a as F, q as b, b as v, V as y, P as g, F as S, c as A, N as C, K as I, A as T, t as H, B as K, d as N, e as i, f as P } from "./index-DpeGkKiN.js";
3
+ import { useTranslation as V } from "react-i18next";
4
+ import { useNavigate as k, Link as x } from "react-router-dom";
5
5
  const c = ["basic-flow", "client-flow"];
6
- function E() {
7
- const { adminClient: u } = h(), { t: e } = k(), d = x(), { realm: n } = F(), { addAlert: l } = b(), s = v(), { handleSubmit: m, formState: p } = s;
6
+ function D() {
7
+ const { adminClient: u } = h(), { t: e } = V(), d = k(), { realm: n } = F(), { addAlert: l } = b(), s = v(), { handleSubmit: m, formState: p } = s;
8
8
  return /* @__PURE__ */ r(w, { children: [
9
9
  /* @__PURE__ */ t(y, { titleKey: "createFlow", subKey: "authenticationCreateFlowHelp" }),
10
10
  /* @__PURE__ */ t(g, { variant: "light", children: /* @__PURE__ */ t(S, { ...s, children: /* @__PURE__ */ r(
@@ -17,7 +17,7 @@ function E() {
17
17
  try {
18
18
  const { id: o } = await u.authenticationManagement.createFlow(f);
19
19
  l(e("flowCreatedSuccess"), i.success), d(
20
- V({
20
+ P({
21
21
  realm: n,
22
22
  id: o,
23
23
  usedBy: "notInUse"
@@ -60,11 +60,11 @@ function E() {
60
60
  }
61
61
  ),
62
62
  /* @__PURE__ */ t(
63
- N,
63
+ K,
64
64
  {
65
65
  "data-testid": "cancel",
66
66
  variant: "link",
67
- component: (a) => /* @__PURE__ */ t(B, { ...a, to: P({ realm: n }) }),
67
+ component: (a) => /* @__PURE__ */ t(x, { ...a, to: N({ realm: n }) }),
68
68
  children: e("cancel")
69
69
  }
70
70
  )
@@ -75,6 +75,6 @@ function E() {
75
75
  ] });
76
76
  }
77
77
  export {
78
- E as default
78
+ D as default
79
79
  };
80
- //# sourceMappingURL=CreateFlow-C1gSi1GV.js.map
80
+ //# sourceMappingURL=CreateFlow-D9CRBXWA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateFlow-C1gSi1GV.js","sources":["../src/authentication/form/CreateFlow.tsx"],"sourcesContent":["import type AuthenticationFlowRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/authenticationFlowRepresentation\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { FormSubmitButton, SelectControl } from \"@keycloak/keycloak-ui-shared\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useAlerts } from \"@keycloak/keycloak-ui-shared\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport { toAuthentication } from \"../routes/Authentication\";\nimport { toFlow } from \"../routes/Flow\";\nimport { NameDescription } from \"./NameDescription\";\n\nconst TYPES = [\"basic-flow\", \"client-flow\"] as const;\n\nexport default function CreateFlow() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { realm } = useRealm();\n const { addAlert } = useAlerts();\n const form = useForm<AuthenticationFlowRepresentation>();\n const { handleSubmit, formState } = form;\n\n const onSubmit = async (formValues: AuthenticationFlowRepresentation) => {\n const flow = { ...formValues, builtIn: false, topLevel: true };\n\n try {\n const { id } =\n await adminClient.authenticationManagement.createFlow(flow);\n addAlert(t(\"flowCreatedSuccess\"), AlertVariant.success);\n navigate(\n toFlow({\n realm,\n id: id!,\n usedBy: \"notInUse\",\n }),\n );\n } catch (error: any) {\n addAlert(\n t(\"flowCreateError\", {\n error: error.response?.data?.errorMessage || error,\n }),\n AlertVariant.danger,\n );\n }\n };\n\n return (\n <>\n <ViewHeader titleKey=\"createFlow\" subKey=\"authenticationCreateFlowHelp\" />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <NameDescription />\n <SelectControl\n name=\"providerId\"\n label={t(\"flowType\")}\n labelIcon={t(\"topLevelFlowTypeHelp\")}\n aria-label={t(\"selectFlowType\")}\n controller={{ defaultValue: TYPES[0] }}\n options={TYPES.map((type) => ({\n key: type,\n value: t(`top-level-flow-type.${type}`),\n }))}\n />\n <ActionGroup>\n <FormSubmitButton\n formState={formState}\n data-testid=\"create\"\n allowInvalid\n allowNonDirty\n >\n {t(\"create\")}\n </FormSubmitButton>\n <Button\n data-testid=\"cancel\"\n variant=\"link\"\n component={(props) => (\n <Link {...props} to={toAuthentication({ realm })}></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["TYPES","CreateFlow","adminClient","useAdminClient","t","useTranslation","navigate","useNavigate","realm","useRealm","addAlert","useAlerts","form","useForm","handleSubmit","formState","jsxs","Fragment","jsx","ViewHeader","PageSection","FormProvider","FormAccess","formValues","flow","id","AlertVariant","toFlow","error","NameDescription","SelectControl","type","ActionGroup","FormSubmitButton","Button","props","Link","toAuthentication"],"mappings":";;;;AAoBA,MAAMA,IAAQ,CAAC,cAAc,aAAa;AAE1C,SAAwBC,IAAa;AACnC,QAAM,EAAE,aAAAC,EAAA,IAAgBC,EAAA,GAElB,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAWC,EAAA,GACX,EAAE,OAAAC,EAAA,IAAUC,EAAA,GACZ,EAAE,UAAAC,EAAA,IAAaC,EAAA,GACfC,IAAOC,EAAA,GACP,EAAE,cAAAC,GAAc,WAAAC,EAAA,IAAcH;AA0BpC,SACE,gBAAAI,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAW,UAAS,cAAa,QAAO,gCAA+B;AAAA,sBACvEC,GAAA,EAAY,SAAQ,SACnB,UAAA,gBAAAF,EAACG,GAAA,EAAc,GAAGT,GAChB,UAAA,gBAAAI;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,cAAY;AAAA,QACZ,MAAK;AAAA,QACL,UAAUR,EAhCH,OAAOS,MAAiD;AACvE,gBAAMC,IAAO,EAAE,GAAGD,GAAY,SAAS,IAAO,UAAU,GAAA;AAExD,cAAI;AACF,kBAAM,EAAE,IAAAE,EAAA,IACN,MAAMvB,EAAY,yBAAyB,WAAWsB,CAAI;AAC5D,YAAAd,EAASN,EAAE,oBAAoB,GAAGsB,EAAa,OAAO,GACtDpB;AAAA,cACEqB,EAAO;AAAA,gBACL,OAAAnB;AAAA,gBACA,IAAAiB;AAAA,gBACA,QAAQ;AAAA,cAAA,CACT;AAAA,YAAA;AAAA,UAEL,SAASG,GAAY;AACnB,YAAAlB;AAAA,cACEN,EAAE,mBAAmB;AAAA,gBACnB,OAAOwB,EAAM,UAAU,MAAM,gBAAgBA;AAAA,cAAA,CAC9C;AAAA,cACDF,EAAa;AAAA,YAAA;AAAA,UAEjB;AAAA,QACF,CAUyC;AAAA,QAE/B,UAAA;AAAA,UAAA,gBAAAR,EAACW,GAAA,EAAgB;AAAA,UACjB,gBAAAX;AAAA,YAACY;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO1B,EAAE,UAAU;AAAA,cACnB,WAAWA,EAAE,sBAAsB;AAAA,cACnC,cAAYA,EAAE,gBAAgB;AAAA,cAC9B,YAAY,EAAE,cAAcJ,EAAM,CAAC,EAAA;AAAA,cACnC,SAASA,EAAM,IAAI,CAAC+B,OAAU;AAAA,gBAC5B,KAAKA;AAAA,gBACL,OAAO3B,EAAE,uBAAuB2B,CAAI,EAAE;AAAA,cAAA,EACtC;AAAA,YAAA;AAAA,UAAA;AAAA,4BAEHC,GAAA,EACC,UAAA;AAAA,YAAA,gBAAAd;AAAA,cAACe;AAAAA,cAAA;AAAA,gBACC,WAAAlB;AAAA,gBACA,eAAY;AAAA,gBACZ,cAAY;AAAA,gBACZ,eAAa;AAAA,gBAEZ,YAAE,QAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,YAEb,gBAAAG;AAAA,cAACgB;AAAA,cAAA;AAAA,gBACC,eAAY;AAAA,gBACZ,SAAQ;AAAA,gBACR,WAAW,CAACC,MACV,gBAAAjB,EAACkB,GAAA,EAAM,GAAGD,GAAO,IAAIE,EAAiB,EAAE,OAAA7B,EAAA,CAAO,EAAA,CAAG;AAAA,gBAGnD,YAAE,QAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UACb,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEJ,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"CreateFlow-D9CRBXWA.js","sources":["../src/authentication/form/CreateFlow.tsx"],"sourcesContent":["import type AuthenticationFlowRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/authenticationFlowRepresentation\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { FormSubmitButton, SelectControl } from \"@keycloak/keycloak-ui-shared\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useAlerts } from \"@keycloak/keycloak-ui-shared\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport { toAuthentication } from \"../routes/Authentication\";\nimport { toFlow } from \"../routes/Flow\";\nimport { NameDescription } from \"./NameDescription\";\n\nconst TYPES = [\"basic-flow\", \"client-flow\"] as const;\n\nexport default function CreateFlow() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { realm } = useRealm();\n const { addAlert } = useAlerts();\n const form = useForm<AuthenticationFlowRepresentation>();\n const { handleSubmit, formState } = form;\n\n const onSubmit = async (formValues: AuthenticationFlowRepresentation) => {\n const flow = { ...formValues, builtIn: false, topLevel: true };\n\n try {\n const { id } =\n await adminClient.authenticationManagement.createFlow(flow);\n addAlert(t(\"flowCreatedSuccess\"), AlertVariant.success);\n navigate(\n toFlow({\n realm,\n id: id!,\n usedBy: \"notInUse\",\n }),\n );\n } catch (error: any) {\n addAlert(\n t(\"flowCreateError\", {\n error: error.response?.data?.errorMessage || error,\n }),\n AlertVariant.danger,\n );\n }\n };\n\n return (\n <>\n <ViewHeader titleKey=\"createFlow\" subKey=\"authenticationCreateFlowHelp\" />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <NameDescription />\n <SelectControl\n name=\"providerId\"\n label={t(\"flowType\")}\n labelIcon={t(\"topLevelFlowTypeHelp\")}\n aria-label={t(\"selectFlowType\")}\n controller={{ defaultValue: TYPES[0] }}\n options={TYPES.map((type) => ({\n key: type,\n value: t(`top-level-flow-type.${type}`),\n }))}\n />\n <ActionGroup>\n <FormSubmitButton\n formState={formState}\n data-testid=\"create\"\n allowInvalid\n allowNonDirty\n >\n {t(\"create\")}\n </FormSubmitButton>\n <Button\n data-testid=\"cancel\"\n variant=\"link\"\n component={(props) => (\n <Link {...props} to={toAuthentication({ realm })}></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["TYPES","CreateFlow","adminClient","useAdminClient","t","useTranslation","navigate","useNavigate","realm","useRealm","addAlert","useAlerts","form","useForm","handleSubmit","formState","jsxs","Fragment","jsx","ViewHeader","PageSection","FormProvider","FormAccess","formValues","flow","id","AlertVariant","toFlow","error","NameDescription","SelectControl","type","ActionGroup","FormSubmitButton","Button","props","Link","toAuthentication"],"mappings":";;;;AAoBA,MAAMA,IAAQ,CAAC,cAAc,aAAa;AAE1C,SAAwBC,IAAa;AACnC,QAAM,EAAE,aAAAC,EAAA,IAAgBC,EAAA,GAElB,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAWC,EAAA,GACX,EAAE,OAAAC,EAAA,IAAUC,EAAA,GACZ,EAAE,UAAAC,EAAA,IAAaC,EAAA,GACfC,IAAOC,EAAA,GACP,EAAE,cAAAC,GAAc,WAAAC,EAAA,IAAcH;AA0BpC,SACE,gBAAAI,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAW,UAAS,cAAa,QAAO,gCAA+B;AAAA,sBACvEC,GAAA,EAAY,SAAQ,SACnB,UAAA,gBAAAF,EAACG,GAAA,EAAc,GAAGT,GAChB,UAAA,gBAAAI;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,cAAY;AAAA,QACZ,MAAK;AAAA,QACL,UAAUR,EAhCH,OAAOS,MAAiD;AACvE,gBAAMC,IAAO,EAAE,GAAGD,GAAY,SAAS,IAAO,UAAU,GAAA;AAExD,cAAI;AACF,kBAAM,EAAE,IAAAE,EAAA,IACN,MAAMvB,EAAY,yBAAyB,WAAWsB,CAAI;AAC5D,YAAAd,EAASN,EAAE,oBAAoB,GAAGsB,EAAa,OAAO,GACtDpB;AAAA,cACEqB,EAAO;AAAA,gBACL,OAAAnB;AAAA,gBACA,IAAAiB;AAAA,gBACA,QAAQ;AAAA,cAAA,CACT;AAAA,YAAA;AAAA,UAEL,SAASG,GAAY;AACnB,YAAAlB;AAAA,cACEN,EAAE,mBAAmB;AAAA,gBACnB,OAAOwB,EAAM,UAAU,MAAM,gBAAgBA;AAAA,cAAA,CAC9C;AAAA,cACDF,EAAa;AAAA,YAAA;AAAA,UAEjB;AAAA,QACF,CAUyC;AAAA,QAE/B,UAAA;AAAA,UAAA,gBAAAR,EAACW,GAAA,EAAgB;AAAA,UACjB,gBAAAX;AAAA,YAACY;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO1B,EAAE,UAAU;AAAA,cACnB,WAAWA,EAAE,sBAAsB;AAAA,cACnC,cAAYA,EAAE,gBAAgB;AAAA,cAC9B,YAAY,EAAE,cAAcJ,EAAM,CAAC,EAAA;AAAA,cACnC,SAASA,EAAM,IAAI,CAAC+B,OAAU;AAAA,gBAC5B,KAAKA;AAAA,gBACL,OAAO3B,EAAE,uBAAuB2B,CAAI,EAAE;AAAA,cAAA,EACtC;AAAA,YAAA;AAAA,UAAA;AAAA,4BAEHC,GAAA,EACC,UAAA;AAAA,YAAA,gBAAAd;AAAA,cAACe;AAAAA,cAAA;AAAA,gBACC,WAAAlB;AAAA,gBACA,eAAY;AAAA,gBACZ,cAAY;AAAA,gBACZ,eAAa;AAAA,gBAEZ,YAAE,QAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,YAEb,gBAAAG;AAAA,cAACgB;AAAA,cAAA;AAAA,gBACC,eAAY;AAAA,gBACZ,SAAQ;AAAA,gBACR,WAAW,CAACC,MACV,gBAAAjB,EAACkB,GAAA,EAAM,GAAGD,GAAO,IAAIE,EAAiB,EAAE,OAAA7B,EAAA,CAAO,EAAA,CAAG;AAAA,gBAGnD,YAAE,QAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UACb,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEJ,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,204 @@
1
+ import { jsxs as c, jsx as t } from "react/jsx-runtime";
2
+ import { aI as p, aJ as a, aK as I, aL as i, aM as R, u as w, q as B, a as V, aq as q, b as C, n as M, aN as j, aO as k, ar as D, P as h, F as G, aP as H, aQ as N, c as _, aR as $, A as J, t as L, B as Q, aS as U, aT as W, aU as X, aV as T, aW as Y, aX as Z } from "./index-DpeGkKiN.js";
3
+ import { useTranslation as y } from "react-i18next";
4
+ import { useState as z } from "react";
5
+ const tt = () => {
6
+ const { t: l } = y(), [m, b] = z("members");
7
+ return /* @__PURE__ */ c(
8
+ p,
9
+ {
10
+ activeKey: m,
11
+ onSelect: (g, u) => b(u),
12
+ children: [
13
+ /* @__PURE__ */ t(
14
+ a,
15
+ {
16
+ eventKey: "members",
17
+ title: /* @__PURE__ */ t(i, { children: l("members") }),
18
+ "data-testid": "organization-members-tab",
19
+ children: /* @__PURE__ */ t(I, {})
20
+ }
21
+ ),
22
+ /* @__PURE__ */ t(
23
+ a,
24
+ {
25
+ eventKey: "invitations",
26
+ title: /* @__PURE__ */ t(i, { children: l("invitations") }),
27
+ "data-testid": "organization-invitations-tab",
28
+ children: /* @__PURE__ */ t(R, {})
29
+ }
30
+ )
31
+ ]
32
+ }
33
+ );
34
+ };
35
+ function nt() {
36
+ const { adminClient: l } = w(), { addAlert: m, addError: b } = B(), { realm: g, realmRepresentation: u } = V(), { id: r } = q(), { t: e } = y(), s = C(), v = async (n) => {
37
+ try {
38
+ const o = Y(n);
39
+ await l.organizations.updateById({ id: r }, o), m(e("organizationSaveSuccess"));
40
+ } catch (o) {
41
+ b("organizationSaveError", o);
42
+ }
43
+ };
44
+ M(
45
+ () => l.organizations.findOne({ id: r }),
46
+ (n) => {
47
+ if (!n)
48
+ throw new Error(e("notFound"));
49
+ s.reset({
50
+ ...n,
51
+ domains: n.domains?.map((o) => o.name),
52
+ attributes: j(n.attributes)
53
+ });
54
+ },
55
+ [r]
56
+ );
57
+ const d = (n) => k(
58
+ Z({
59
+ realm: g,
60
+ id: r,
61
+ tab: n
62
+ })
63
+ ), E = d("settings"), S = d("attributes"), P = d("members"), f = d("groups"), A = d("identityProviders"), O = d("events"), { hasAccess: K } = D(), [F, x] = z("adminEvents");
64
+ return /* @__PURE__ */ t(h, { variant: "light", className: "pf-v5-u-p-0", children: /* @__PURE__ */ c(G, { ...s, children: [
65
+ /* @__PURE__ */ t(H, { save: () => v(s.getValues()) }),
66
+ /* @__PURE__ */ c(
67
+ N,
68
+ {
69
+ "data-testid": "organization-tabs",
70
+ "aria-label": e("organization"),
71
+ isBox: !0,
72
+ mountOnEnter: !0,
73
+ children: [
74
+ /* @__PURE__ */ t(
75
+ a,
76
+ {
77
+ id: "settings",
78
+ "data-testid": "settingsTab",
79
+ title: /* @__PURE__ */ t(i, { children: e("settings") }),
80
+ ...E,
81
+ children: /* @__PURE__ */ t(h, { children: /* @__PURE__ */ c(
82
+ _,
83
+ {
84
+ role: "anyone",
85
+ onSubmit: s.handleSubmit(v),
86
+ isHorizontal: !0,
87
+ children: [
88
+ /* @__PURE__ */ t($, { readOnly: !0 }),
89
+ /* @__PURE__ */ c(J, { children: [
90
+ /* @__PURE__ */ t(
91
+ L,
92
+ {
93
+ formState: s.formState,
94
+ "data-testid": "save",
95
+ children: e("save")
96
+ }
97
+ ),
98
+ /* @__PURE__ */ t(
99
+ Q,
100
+ {
101
+ onClick: () => s.reset(),
102
+ "data-testid": "reset",
103
+ variant: "link",
104
+ children: e("reset")
105
+ }
106
+ )
107
+ ] })
108
+ ]
109
+ }
110
+ ) })
111
+ }
112
+ ),
113
+ /* @__PURE__ */ t(
114
+ a,
115
+ {
116
+ id: "attributes",
117
+ "data-testid": "attributeTab",
118
+ title: /* @__PURE__ */ t(i, { children: e("attributes") }),
119
+ ...S,
120
+ children: /* @__PURE__ */ t(h, { variant: "light", children: /* @__PURE__ */ t(
121
+ U,
122
+ {
123
+ form: s,
124
+ save: v,
125
+ reset: () => s.reset({
126
+ ...s.getValues()
127
+ }),
128
+ name: "attributes"
129
+ }
130
+ ) })
131
+ }
132
+ ),
133
+ /* @__PURE__ */ t(
134
+ a,
135
+ {
136
+ id: "members",
137
+ "data-testid": "membersTab",
138
+ title: /* @__PURE__ */ t(i, { children: e("members") }),
139
+ ...P,
140
+ children: /* @__PURE__ */ t(tt, {})
141
+ }
142
+ ),
143
+ /* @__PURE__ */ t(
144
+ a,
145
+ {
146
+ id: "groups",
147
+ "data-testid": "groupsTab",
148
+ title: /* @__PURE__ */ t(i, { children: e("groups") }),
149
+ ...f,
150
+ children: /* @__PURE__ */ t(W, { orgId: r })
151
+ }
152
+ ),
153
+ /* @__PURE__ */ t(
154
+ a,
155
+ {
156
+ id: "identityProviders",
157
+ "data-testid": "identityProvidersTab",
158
+ title: /* @__PURE__ */ t(i, { children: e("identityProviders") }),
159
+ ...A,
160
+ children: /* @__PURE__ */ t(X, {})
161
+ }
162
+ ),
163
+ u?.adminEventsEnabled && K("view-events") && /* @__PURE__ */ t(
164
+ a,
165
+ {
166
+ "data-testid": "admin-events-tab",
167
+ title: /* @__PURE__ */ t(i, { children: e("adminEvents") }),
168
+ ...O,
169
+ children: /* @__PURE__ */ c(
170
+ p,
171
+ {
172
+ activeKey: F,
173
+ onSelect: (n, o) => x(o),
174
+ children: [
175
+ /* @__PURE__ */ t(
176
+ a,
177
+ {
178
+ eventKey: "adminEvents",
179
+ title: /* @__PURE__ */ t(i, { children: e("adminEvents") }),
180
+ children: /* @__PURE__ */ t(T, { resourcePath: `organizations/${r}` })
181
+ }
182
+ ),
183
+ /* @__PURE__ */ t(
184
+ a,
185
+ {
186
+ eventKey: "membershipEvents",
187
+ title: /* @__PURE__ */ t(i, { children: e("membershipEvents") }),
188
+ children: /* @__PURE__ */ t(T, { resourcePath: `organizations/${r}/members` })
189
+ }
190
+ )
191
+ ]
192
+ }
193
+ )
194
+ }
195
+ )
196
+ ]
197
+ }
198
+ )
199
+ ] }) });
200
+ }
201
+ export {
202
+ nt as default
203
+ };
204
+ //# sourceMappingURL=DetailOrganization-qajGTP2J.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DetailOrganization-qajGTP2J.js","sources":["../src/organizations/MembersSection.tsx","../src/organizations/DetailOrganization.tsx"],"sourcesContent":["import { Tab, Tabs, TabTitleText } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Invitations } from \"./Invitations\";\nimport { Members } from \"./Members\";\n\nexport const MembersSection = () => {\n const { t } = useTranslation();\n const [activeTab, setActiveTab] = useState(\"members\");\n\n return (\n <Tabs\n activeKey={activeTab}\n onSelect={(_, key) => setActiveTab(key as string)}\n >\n <Tab\n eventKey=\"members\"\n title={<TabTitleText>{t(\"members\")}</TabTitleText>}\n data-testid=\"organization-members-tab\"\n >\n <Members />\n </Tab>\n <Tab\n eventKey=\"invitations\"\n title={<TabTitleText>{t(\"invitations\")}</TabTitleText>}\n data-testid=\"organization-invitations-tab\"\n >\n <Invitations />\n </Tab>\n </Tabs>\n );\n};\n","import {\n FormSubmitButton,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Button,\n PageSection,\n Tab,\n Tabs,\n TabTitleText,\n} from \"@patternfly/react-core\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../admin-client\";\nimport { FormAccess } from \"../components/form/FormAccess\";\nimport { AttributesForm } from \"../components/key-value-form/AttributeForm\";\nimport { arrayToKeyValue } from \"../components/key-value-form/key-value-convert\";\nimport {\n RoutableTabs,\n useRoutableTab,\n} from \"../components/routable-tabs/RoutableTabs\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { useParams } from \"../utils/useParams\";\nimport { DetailOrganizationHeader } from \"./DetailOraganzationHeader\";\nimport { IdentityProviders } from \"./IdentityProviders\";\nimport { MembersSection } from \"./MembersSection\";\nimport GroupsSection from \"../groups/GroupsSection\";\nimport {\n OrganizationForm,\n OrganizationFormType,\n convertToOrg,\n} from \"./OrganizationForm\";\nimport {\n EditOrganizationParams,\n OrganizationTab,\n toEditOrganization,\n} from \"./routes/EditOrganization\";\nimport { useAccess } from \"../context/access/Access\";\nimport { AdminEvents } from \"../events/AdminEvents\";\nimport { useState } from \"react\";\n\nexport default function DetailOrganization() {\n const { adminClient } = useAdminClient();\n const { addAlert, addError } = useAlerts();\n\n const { realm, realmRepresentation } = useRealm();\n const { id } = useParams<EditOrganizationParams>();\n const { t } = useTranslation();\n\n const form = useForm<OrganizationFormType>();\n\n const save = async (org: OrganizationFormType) => {\n try {\n const organization = convertToOrg(org);\n await adminClient.organizations.updateById({ id }, organization);\n addAlert(t(\"organizationSaveSuccess\"));\n } catch (error) {\n addError(\"organizationSaveError\", error);\n }\n };\n\n useFetch(\n () => adminClient.organizations.findOne({ id }),\n (org) => {\n if (!org) {\n throw new Error(t(\"notFound\"));\n }\n form.reset({\n ...org,\n domains: org.domains?.map((d) => d.name),\n attributes: arrayToKeyValue(org.attributes),\n });\n },\n [id],\n );\n\n const useTab = (tab: OrganizationTab) =>\n useRoutableTab(\n toEditOrganization({\n realm,\n id,\n tab,\n }),\n );\n\n const settingsTab = useTab(\"settings\");\n const attributesTab = useTab(\"attributes\");\n const membersTab = useTab(\"members\");\n const groupsTab = useTab(\"groups\");\n const identityProvidersTab = useTab(\"identityProviders\");\n const eventsTab = useTab(\"events\");\n\n const { hasAccess } = useAccess();\n const [activeEventsTab, setActiveEventsTab] = useState(\"adminEvents\");\n\n return (\n <PageSection variant=\"light\" className=\"pf-v5-u-p-0\">\n <FormProvider {...form}>\n <DetailOrganizationHeader save={() => save(form.getValues())} />\n <RoutableTabs\n data-testid=\"organization-tabs\"\n aria-label={t(\"organization\")}\n isBox\n mountOnEnter\n >\n <Tab\n id=\"settings\"\n data-testid=\"settingsTab\"\n title={<TabTitleText>{t(\"settings\")}</TabTitleText>}\n {...settingsTab}\n >\n <PageSection>\n <FormAccess\n role=\"anyone\"\n onSubmit={form.handleSubmit(save)}\n isHorizontal\n >\n <OrganizationForm readOnly />\n <ActionGroup>\n <FormSubmitButton\n formState={form.formState}\n data-testid=\"save\"\n >\n {t(\"save\")}\n </FormSubmitButton>\n <Button\n onClick={() => form.reset()}\n data-testid=\"reset\"\n variant=\"link\"\n >\n {t(\"reset\")}\n </Button>\n </ActionGroup>\n </FormAccess>\n </PageSection>\n </Tab>\n <Tab\n id=\"attributes\"\n data-testid=\"attributeTab\"\n title={<TabTitleText>{t(\"attributes\")}</TabTitleText>}\n {...attributesTab}\n >\n <PageSection variant=\"light\">\n <AttributesForm\n form={form}\n save={save}\n reset={() =>\n form.reset({\n ...form.getValues(),\n })\n }\n name=\"attributes\"\n />\n </PageSection>\n </Tab>\n <Tab\n id=\"members\"\n data-testid=\"membersTab\"\n title={<TabTitleText>{t(\"members\")}</TabTitleText>}\n {...membersTab}\n >\n <MembersSection />\n </Tab>\n <Tab\n id=\"groups\"\n data-testid=\"groupsTab\"\n title={<TabTitleText>{t(\"groups\")}</TabTitleText>}\n {...groupsTab}\n >\n <GroupsSection orgId={id} />\n </Tab>\n <Tab\n id=\"identityProviders\"\n data-testid=\"identityProvidersTab\"\n title={<TabTitleText>{t(\"identityProviders\")}</TabTitleText>}\n {...identityProvidersTab}\n >\n <IdentityProviders />\n </Tab>\n {realmRepresentation?.adminEventsEnabled &&\n hasAccess(\"view-events\") && (\n <Tab\n data-testid=\"admin-events-tab\"\n title={<TabTitleText>{t(\"adminEvents\")}</TabTitleText>}\n {...eventsTab}\n >\n <Tabs\n activeKey={activeEventsTab}\n onSelect={(_, key) => setActiveEventsTab(key as string)}\n >\n <Tab\n eventKey=\"adminEvents\"\n title={<TabTitleText>{t(\"adminEvents\")}</TabTitleText>}\n >\n <AdminEvents resourcePath={`organizations/${id}`} />\n </Tab>\n <Tab\n eventKey=\"membershipEvents\"\n title={<TabTitleText>{t(\"membershipEvents\")}</TabTitleText>}\n >\n <AdminEvents resourcePath={`organizations/${id}/members`} />\n </Tab>\n </Tabs>\n </Tab>\n )}\n </RoutableTabs>\n </FormProvider>\n </PageSection>\n );\n}\n"],"names":["MembersSection","t","useTranslation","activeTab","setActiveTab","useState","jsxs","Tabs","_","key","jsx","Tab","TabTitleText","Members","Invitations","DetailOrganization","adminClient","useAdminClient","addAlert","addError","useAlerts","realm","realmRepresentation","useRealm","id","useParams","form","useForm","save","org","organization","convertToOrg","error","useFetch","d","arrayToKeyValue","useTab","tab","useRoutableTab","toEditOrganization","settingsTab","attributesTab","membersTab","groupsTab","identityProvidersTab","eventsTab","hasAccess","useAccess","activeEventsTab","setActiveEventsTab","PageSection","FormProvider","DetailOrganizationHeader","RoutableTabs","FormAccess","OrganizationForm","ActionGroup","FormSubmitButton","Button","AttributesForm","GroupsSection","IdentityProviders","AdminEvents"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { jsxs as u, Fragment as M, jsx as o } from "react/jsx-runtime";
2
- import { u as R, ao as k, _ as J, b8 as Q, b as U, y as W, V as X, P as Y, c as Z, au as $, al as ee, am as te, an as oe, a4 as re, a7 as V, F as ae, a0 as ce, A as se, B as g, b9 as h, d as ne } from "./index-D3mEQ9NL.js";
1
+ import { jsxs as u, Fragment as R, jsx as o } from "react/jsx-runtime";
2
+ import { u as _, aq as k, q as J, bb as Q, b as U, n as W, V as X, P as Y, c as Z, aw as $, an as ee, ao as te, ap as oe, a4 as re, a7 as V, F as ae, a0 as ce, A as se, B as g, bc as h, e as ne } from "./index-DpeGkKiN.js";
3
3
  import { useState as l } from "react";
4
4
  import { useTranslation as ie } from "react-i18next";
5
5
  import { useNavigate as le, Link as F } from "react-router-dom";
@@ -8,21 +8,21 @@ const I = {
8
8
  executor: ""
9
9
  };
10
10
  function ge() {
11
- const { adminClient: P } = R(), { t: c } = ie(), C = le(), { realm: d, profileName: n } = k(), { executorName: i } = k(), { addAlert: A, addError: H } = J(), [N, T] = l(!1), x = Q().componentTypes?.["org.keycloak.services.clientpolicy.executor.ClientPolicyExecutorProvider"], [f, O] = l([]), [B, G] = l([]), [v, D] = l([]), [L, j] = l([]), p = U({ defaultValues: I }), { control: w, reset: y, handleSubmit: _ } = p, a = !!i, E = (e) => {
11
+ const { adminClient: P } = _(), { t: c } = ie(), C = le(), { realm: d, profileName: n } = k(), { executorName: i } = k(), { addAlert: A, addError: H } = J(), [N, T] = l(!1), x = Q().componentTypes?.["org.keycloak.services.clientpolicy.executor.ClientPolicyExecutorProvider"], [f, O] = l([]), [B, G] = l([]), [v, q] = l([]), [w, D] = l([]), p = U({ defaultValues: I }), { control: L, reset: b, handleSubmit: j } = p, a = !!i, y = (e) => {
12
12
  const r = e.find((s) => s.name === n)?.executors?.find(
13
13
  (s) => s.executor === i
14
14
  );
15
- r && y({ config: r.configuration });
15
+ r && b({ config: r.configuration });
16
16
  };
17
17
  W(
18
18
  () => P.clientPolicies.listProfiles({ includeGlobalProfiles: !0 }),
19
19
  (e) => {
20
- D(e.globalProfiles), j(e.profiles), E(e.profiles), E(e.globalProfiles);
20
+ q(e.globalProfiles), D(e.profiles), y(e.profiles), y(e.globalProfiles);
21
21
  },
22
22
  []
23
23
  );
24
- const q = async () => {
25
- const e = p.getValues(), t = L.map((r) => {
24
+ const z = async () => {
25
+ const e = p.getValues(), t = w.map((r) => {
26
26
  if (r.name !== n)
27
27
  return r;
28
28
  const s = (r.executors ?? []).concat({
@@ -31,7 +31,7 @@ function ge() {
31
31
  });
32
32
  if (a) {
33
33
  const S = r.executors.find(
34
- (K) => K.executor === i
34
+ (M) => M.executor === i
35
35
  );
36
36
  S.configuration = {
37
37
  ...S.configuration,
@@ -56,9 +56,9 @@ function ge() {
56
56
  }
57
57
  }, m = v.find(
58
58
  (e) => e.name === n
59
- ), b = x?.find(
59
+ ), E = x?.find(
60
60
  (e) => e.id === i
61
- ), z = b?.properties.map(
61
+ ), K = E?.properties.map(
62
62
  (e) => {
63
63
  const t = a ? e.defaultValue : "";
64
64
  return {
@@ -67,7 +67,7 @@ function ge() {
67
67
  };
68
68
  }
69
69
  );
70
- return /* @__PURE__ */ u(M, { children: [
70
+ return /* @__PURE__ */ u(R, { children: [
71
71
  /* @__PURE__ */ o(
72
72
  X,
73
73
  {
@@ -98,7 +98,7 @@ function ge() {
98
98
  ) : a ? /* @__PURE__ */ o(
99
99
  V,
100
100
  {
101
- helpText: b?.helpText,
101
+ helpText: E?.helpText,
102
102
  fieldLabelId: "executorTypeHelpText"
103
103
  }
104
104
  ) : void 0,
@@ -107,7 +107,7 @@ function ge() {
107
107
  {
108
108
  name: "executor",
109
109
  defaultValue: "",
110
- control: w,
110
+ control: L,
111
111
  render: ({ field: e }) => /* @__PURE__ */ o(
112
112
  te,
113
113
  {
@@ -115,7 +115,7 @@ function ge() {
115
115
  placeholderText: "Select an executor",
116
116
  onToggle: (t) => T(t),
117
117
  onSelect: (t) => {
118
- y({ ...I, executor: t.toString() });
118
+ b({ ...I, executor: t.toString() });
119
119
  const r = x?.filter(
120
120
  (s) => s.id === t
121
121
  );
@@ -150,7 +150,7 @@ function ge() {
150
150
  /* @__PURE__ */ o(ae, { ...p, children: /* @__PURE__ */ o(
151
151
  ce,
152
152
  {
153
- properties: a ? z : B
153
+ properties: a ? K : B
154
154
  }
155
155
  ) }),
156
156
  !m && /* @__PURE__ */ u(se, { children: [
@@ -158,7 +158,7 @@ function ge() {
158
158
  g,
159
159
  {
160
160
  variant: "primary",
161
- onClick: () => _(q)(),
161
+ onClick: () => j(z)(),
162
162
  "data-testid": "addExecutor-saveBtn",
163
163
  children: c(a ? "save" : "add")
164
164
  }
@@ -196,4 +196,4 @@ function ge() {
196
196
  export {
197
197
  ge as default
198
198
  };
199
- //# sourceMappingURL=ExecutorForm-D3r69dqU.js.map
199
+ //# sourceMappingURL=ExecutorForm-SQ60i4SS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutorForm-D3r69dqU.js","sources":["../src/realm-settings/ExecutorForm.tsx"],"sourcesContent":["import type { ConfigPropertyRepresentation } from \"@keycloak/keycloak-admin-client/lib/defs/authenticatorConfigInfoRepresentation\";\nimport type ClientProfileRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientProfileRepresentation\";\nimport type ComponentTypeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/componentTypeRepresentation\";\nimport {\n HelpItem,\n KeycloakSelect,\n SelectVariant,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n FormGroup,\n PageSection,\n SelectOption,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { DynamicComponents } from \"../components/dynamic/DynamicComponents\";\nimport { FormAccess } from \"../components/form/FormAccess\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { useServerInfo } from \"../context/server-info/ServerInfoProvider\";\nimport { useParams } from \"../utils/useParams\";\nimport { ClientProfileParams, toClientProfile } from \"./routes/ClientProfile\";\nimport type { ExecutorParams } from \"./routes/Executor\";\n\ntype ExecutorForm = {\n config?: object;\n executor: string;\n};\n\nconst defaultValues: ExecutorForm = {\n config: {},\n executor: \"\",\n};\n\nexport default function ExecutorForm() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { realm, profileName } = useParams<ClientProfileParams>();\n const { executorName } = useParams<ExecutorParams>();\n const { addAlert, addError } = useAlerts();\n const [selectExecutorTypeOpen, setSelectExecutorTypeOpen] = useState(false);\n const serverInfo = useServerInfo();\n const executorTypes =\n serverInfo.componentTypes?.[\n \"org.keycloak.services.clientpolicy.executor.ClientPolicyExecutorProvider\"\n ];\n const [executors, setExecutors] = useState<ComponentTypeRepresentation[]>([]);\n const [executorProperties, setExecutorProperties] = useState<\n ConfigPropertyRepresentation[]\n >([]);\n const [globalProfiles, setGlobalProfiles] = useState<\n ClientProfileRepresentation[]\n >([]);\n const [profiles, setProfiles] = useState<ClientProfileRepresentation[]>([]);\n const form = useForm({ defaultValues });\n const { control, reset, handleSubmit } = form;\n const editMode = !!executorName;\n\n const setupForm = (profiles: ClientProfileRepresentation[]) => {\n const profile = profiles.find((profile) => profile.name === profileName);\n const executor = profile?.executors?.find(\n (executor) => executor.executor === executorName,\n );\n if (executor) reset({ config: executor.configuration });\n };\n\n useFetch(\n () =>\n adminClient.clientPolicies.listProfiles({ includeGlobalProfiles: true }),\n (profiles) => {\n setGlobalProfiles(profiles.globalProfiles!);\n setProfiles(profiles.profiles!);\n\n setupForm(profiles.profiles!);\n setupForm(profiles.globalProfiles!);\n },\n [],\n );\n\n const save = async () => {\n const formValues = form.getValues();\n const updatedProfiles = profiles.map((profile) => {\n if (profile.name !== profileName) {\n return profile;\n }\n\n const executors = (profile.executors ?? []).concat({\n executor: formValues.executor,\n configuration: formValues.config || {},\n });\n\n if (editMode) {\n const profileExecutor = profile.executors!.find(\n (executor) => executor.executor === executorName,\n );\n profileExecutor!.configuration = {\n ...profileExecutor!.configuration,\n ...formValues.config,\n };\n }\n\n if (editMode) {\n return profile;\n }\n return {\n ...profile,\n executors,\n };\n });\n try {\n await adminClient.clientPolicies.createProfiles({\n profiles: updatedProfiles,\n globalProfiles: globalProfiles,\n });\n addAlert(\n editMode ? t(\"updateExecutorSuccess\") : t(\"addExecutorSuccess\"),\n AlertVariant.success,\n );\n\n navigate(toClientProfile({ realm, profileName }));\n } catch (error) {\n addError(editMode ? \"updateExecutorError\" : \"addExecutorError\", error);\n }\n };\n\n const globalProfile = globalProfiles.find(\n (globalProfile) => globalProfile.name === profileName,\n );\n\n const profileExecutorType = executorTypes?.find(\n (executor) => executor.id === executorName,\n );\n\n const editedProfileExecutors =\n profileExecutorType?.properties.map<ConfigPropertyRepresentation>(\n (property) => {\n const globalDefaultValues = editMode ? property.defaultValue : \"\";\n return {\n ...property,\n defaultValue: globalDefaultValues,\n };\n },\n );\n\n return (\n <>\n <ViewHeader\n titleKey={editMode ? executorName : t(\"addExecutor\")}\n divider\n />\n <PageSection variant=\"light\">\n <FormAccess\n isHorizontal\n role=\"manage-realm\"\n className=\"pf-v5-u-mt-lg\"\n isReadOnly={!!globalProfile}\n >\n <FormGroup\n label={t(\"executorType\")}\n fieldId=\"kc-executorType\"\n labelIcon={\n executors.length > 0 && executors[0].helpText! !== \"\" ? (\n <HelpItem\n helpText={executors[0].helpText}\n fieldLabelId=\"executorTypeHelpText\"\n />\n ) : editMode ? (\n <HelpItem\n helpText={profileExecutorType?.helpText}\n fieldLabelId=\"executorTypeHelpText\"\n />\n ) : undefined\n }\n >\n <Controller\n name=\"executor\"\n defaultValue=\"\"\n control={control}\n render={({ field }) => (\n <KeycloakSelect\n toggleId=\"kc-executor\"\n placeholderText=\"Select an executor\"\n onToggle={(isOpen) => setSelectExecutorTypeOpen(isOpen)}\n onSelect={(value) => {\n reset({ ...defaultValues, executor: value.toString() });\n const selectedExecutor = executorTypes?.filter(\n (type) => type.id === value,\n );\n setExecutors(selectedExecutor ?? []);\n setExecutorProperties(\n selectedExecutor?.[0].properties ?? [],\n );\n setSelectExecutorTypeOpen(false);\n }}\n selections={editMode ? executorName : field.value}\n variant={SelectVariant.single}\n data-testid=\"executorType-select\"\n aria-label={t(\"executorType\")}\n isOpen={selectExecutorTypeOpen}\n maxHeight={580}\n isDisabled={editMode}\n >\n {executorTypes?.map((option) => (\n <SelectOption\n data-testid={option.id}\n selected={option.id === field.value}\n key={option.id}\n value={option.id}\n description={option.helpText}\n >\n {option.id}\n </SelectOption>\n ))}\n </KeycloakSelect>\n )}\n />\n </FormGroup>\n <FormProvider {...form}>\n <DynamicComponents\n properties={\n editMode ? editedProfileExecutors! : executorProperties\n }\n />\n </FormProvider>\n {!globalProfile && (\n <ActionGroup>\n <Button\n variant=\"primary\"\n onClick={() => handleSubmit(save)()}\n data-testid=\"addExecutor-saveBtn\"\n >\n {editMode ? t(\"save\") : t(\"add\")}\n </Button>\n <Button\n variant=\"link\"\n component={(props) => (\n <Link\n {...props}\n to={toClientProfile({ realm, profileName })}\n />\n )}\n data-testid=\"addExecutor-cancelBtn\"\n >\n {t(\"cancel\")}\n </Button>\n </ActionGroup>\n )}\n </FormAccess>\n {editMode && globalProfile && (\n <div className=\"kc-backToProfile\">\n <Button\n component={(props) => (\n <Link {...props} to={toClientProfile({ realm, profileName })} />\n )}\n variant=\"primary\"\n >\n {t(\"back\")}\n </Button>\n </div>\n )}\n </PageSection>\n </>\n );\n}\n"],"names":["defaultValues","ExecutorForm","adminClient","useAdminClient","t","useTranslation","navigate","useNavigate","realm","profileName","useParams","executorName","addAlert","addError","useAlerts","selectExecutorTypeOpen","setSelectExecutorTypeOpen","useState","executorTypes","useServerInfo","executors","setExecutors","executorProperties","setExecutorProperties","globalProfiles","setGlobalProfiles","profiles","setProfiles","form","useForm","control","reset","handleSubmit","editMode","setupForm","executor","profile","useFetch","save","formValues","updatedProfiles","profileExecutor","AlertVariant","toClientProfile","error","globalProfile","profileExecutorType","editedProfileExecutors","property","globalDefaultValues","jsxs","Fragment","jsx","ViewHeader","PageSection","FormAccess","FormGroup","HelpItem","Controller","field","KeycloakSelect","isOpen","value","selectedExecutor","type","SelectVariant","option","SelectOption","FormProvider","DynamicComponents","ActionGroup","Button","props","Link"],"mappings":"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"}
1
+ {"version":3,"file":"ExecutorForm-SQ60i4SS.js","sources":["../src/realm-settings/ExecutorForm.tsx"],"sourcesContent":["import type { ConfigPropertyRepresentation } from \"@keycloak/keycloak-admin-client/lib/defs/authenticatorConfigInfoRepresentation\";\nimport type ClientProfileRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientProfileRepresentation\";\nimport type ComponentTypeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/componentTypeRepresentation\";\nimport {\n HelpItem,\n KeycloakSelect,\n SelectVariant,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n FormGroup,\n PageSection,\n SelectOption,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { DynamicComponents } from \"../components/dynamic/DynamicComponents\";\nimport { FormAccess } from \"../components/form/FormAccess\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { useServerInfo } from \"../context/server-info/ServerInfoProvider\";\nimport { useParams } from \"../utils/useParams\";\nimport { ClientProfileParams, toClientProfile } from \"./routes/ClientProfile\";\nimport type { ExecutorParams } from \"./routes/Executor\";\n\ntype ExecutorForm = {\n config?: object;\n executor: string;\n};\n\nconst defaultValues: ExecutorForm = {\n config: {},\n executor: \"\",\n};\n\nexport default function ExecutorForm() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { realm, profileName } = useParams<ClientProfileParams>();\n const { executorName } = useParams<ExecutorParams>();\n const { addAlert, addError } = useAlerts();\n const [selectExecutorTypeOpen, setSelectExecutorTypeOpen] = useState(false);\n const serverInfo = useServerInfo();\n const executorTypes =\n serverInfo.componentTypes?.[\n \"org.keycloak.services.clientpolicy.executor.ClientPolicyExecutorProvider\"\n ];\n const [executors, setExecutors] = useState<ComponentTypeRepresentation[]>([]);\n const [executorProperties, setExecutorProperties] = useState<\n ConfigPropertyRepresentation[]\n >([]);\n const [globalProfiles, setGlobalProfiles] = useState<\n ClientProfileRepresentation[]\n >([]);\n const [profiles, setProfiles] = useState<ClientProfileRepresentation[]>([]);\n const form = useForm({ defaultValues });\n const { control, reset, handleSubmit } = form;\n const editMode = !!executorName;\n\n const setupForm = (profiles: ClientProfileRepresentation[]) => {\n const profile = profiles.find((profile) => profile.name === profileName);\n const executor = profile?.executors?.find(\n (executor) => executor.executor === executorName,\n );\n if (executor) reset({ config: executor.configuration });\n };\n\n useFetch(\n () =>\n adminClient.clientPolicies.listProfiles({ includeGlobalProfiles: true }),\n (profiles) => {\n setGlobalProfiles(profiles.globalProfiles!);\n setProfiles(profiles.profiles!);\n\n setupForm(profiles.profiles!);\n setupForm(profiles.globalProfiles!);\n },\n [],\n );\n\n const save = async () => {\n const formValues = form.getValues();\n const updatedProfiles = profiles.map((profile) => {\n if (profile.name !== profileName) {\n return profile;\n }\n\n const executors = (profile.executors ?? []).concat({\n executor: formValues.executor,\n configuration: formValues.config || {},\n });\n\n if (editMode) {\n const profileExecutor = profile.executors!.find(\n (executor) => executor.executor === executorName,\n );\n profileExecutor!.configuration = {\n ...profileExecutor!.configuration,\n ...formValues.config,\n };\n }\n\n if (editMode) {\n return profile;\n }\n return {\n ...profile,\n executors,\n };\n });\n try {\n await adminClient.clientPolicies.createProfiles({\n profiles: updatedProfiles,\n globalProfiles: globalProfiles,\n });\n addAlert(\n editMode ? t(\"updateExecutorSuccess\") : t(\"addExecutorSuccess\"),\n AlertVariant.success,\n );\n\n navigate(toClientProfile({ realm, profileName }));\n } catch (error) {\n addError(editMode ? \"updateExecutorError\" : \"addExecutorError\", error);\n }\n };\n\n const globalProfile = globalProfiles.find(\n (globalProfile) => globalProfile.name === profileName,\n );\n\n const profileExecutorType = executorTypes?.find(\n (executor) => executor.id === executorName,\n );\n\n const editedProfileExecutors =\n profileExecutorType?.properties.map<ConfigPropertyRepresentation>(\n (property) => {\n const globalDefaultValues = editMode ? property.defaultValue : \"\";\n return {\n ...property,\n defaultValue: globalDefaultValues,\n };\n },\n );\n\n return (\n <>\n <ViewHeader\n titleKey={editMode ? executorName : t(\"addExecutor\")}\n divider\n />\n <PageSection variant=\"light\">\n <FormAccess\n isHorizontal\n role=\"manage-realm\"\n className=\"pf-v5-u-mt-lg\"\n isReadOnly={!!globalProfile}\n >\n <FormGroup\n label={t(\"executorType\")}\n fieldId=\"kc-executorType\"\n labelIcon={\n executors.length > 0 && executors[0].helpText! !== \"\" ? (\n <HelpItem\n helpText={executors[0].helpText}\n fieldLabelId=\"executorTypeHelpText\"\n />\n ) : editMode ? (\n <HelpItem\n helpText={profileExecutorType?.helpText}\n fieldLabelId=\"executorTypeHelpText\"\n />\n ) : undefined\n }\n >\n <Controller\n name=\"executor\"\n defaultValue=\"\"\n control={control}\n render={({ field }) => (\n <KeycloakSelect\n toggleId=\"kc-executor\"\n placeholderText=\"Select an executor\"\n onToggle={(isOpen) => setSelectExecutorTypeOpen(isOpen)}\n onSelect={(value) => {\n reset({ ...defaultValues, executor: value.toString() });\n const selectedExecutor = executorTypes?.filter(\n (type) => type.id === value,\n );\n setExecutors(selectedExecutor ?? []);\n setExecutorProperties(\n selectedExecutor?.[0].properties ?? [],\n );\n setSelectExecutorTypeOpen(false);\n }}\n selections={editMode ? executorName : field.value}\n variant={SelectVariant.single}\n data-testid=\"executorType-select\"\n aria-label={t(\"executorType\")}\n isOpen={selectExecutorTypeOpen}\n maxHeight={580}\n isDisabled={editMode}\n >\n {executorTypes?.map((option) => (\n <SelectOption\n data-testid={option.id}\n selected={option.id === field.value}\n key={option.id}\n value={option.id}\n description={option.helpText}\n >\n {option.id}\n </SelectOption>\n ))}\n </KeycloakSelect>\n )}\n />\n </FormGroup>\n <FormProvider {...form}>\n <DynamicComponents\n properties={\n editMode ? editedProfileExecutors! : executorProperties\n }\n />\n </FormProvider>\n {!globalProfile && (\n <ActionGroup>\n <Button\n variant=\"primary\"\n onClick={() => handleSubmit(save)()}\n data-testid=\"addExecutor-saveBtn\"\n >\n {editMode ? t(\"save\") : t(\"add\")}\n </Button>\n <Button\n variant=\"link\"\n component={(props) => (\n <Link\n {...props}\n to={toClientProfile({ realm, profileName })}\n />\n )}\n data-testid=\"addExecutor-cancelBtn\"\n >\n {t(\"cancel\")}\n </Button>\n </ActionGroup>\n )}\n </FormAccess>\n {editMode && globalProfile && (\n <div className=\"kc-backToProfile\">\n <Button\n component={(props) => (\n <Link {...props} to={toClientProfile({ realm, profileName })} />\n )}\n variant=\"primary\"\n >\n {t(\"back\")}\n </Button>\n </div>\n )}\n </PageSection>\n </>\n );\n}\n"],"names":["defaultValues","ExecutorForm","adminClient","useAdminClient","t","useTranslation","navigate","useNavigate","realm","profileName","useParams","executorName","addAlert","addError","useAlerts","selectExecutorTypeOpen","setSelectExecutorTypeOpen","useState","executorTypes","useServerInfo","executors","setExecutors","executorProperties","setExecutorProperties","globalProfiles","setGlobalProfiles","profiles","setProfiles","form","useForm","control","reset","handleSubmit","editMode","setupForm","executor","profile","useFetch","save","formValues","updatedProfiles","profileExecutor","AlertVariant","toClientProfile","error","globalProfile","profileExecutorType","editedProfileExecutors","property","globalDefaultValues","jsxs","Fragment","jsx","ViewHeader","PageSection","FormAccess","FormGroup","HelpItem","Controller","field","KeycloakSelect","isOpen","value","selectedExecutor","type","SelectVariant","option","SelectOption","FormProvider","DynamicComponents","ActionGroup","Button","props","Link"],"mappings":";;;;;AAoCA,MAAMA,IAA8B;AAAA,EAClC,QAAQ,CAAA;AAAA,EACR,UAAU;AACZ;AAEA,SAAwBC,KAAe;AACrC,QAAM,EAAE,aAAAC,EAAA,IAAgBC,EAAA,GAElB,EAAE,GAAAC,EAAA,IAAMC,GAAA,GACRC,IAAWC,GAAA,GACX,EAAE,OAAAC,GAAO,aAAAC,EAAA,IAAgBC,EAAA,GACzB,EAAE,cAAAC,EAAA,IAAiBD,EAAA,GACnB,EAAE,UAAAE,GAAU,UAAAC,EAAA,IAAaC,EAAA,GACzB,CAACC,GAAwBC,CAAyB,IAAIC,EAAS,EAAK,GAEpEC,IADaC,EAAA,EAEN,iBACT,0EACF,GACI,CAACC,GAAWC,CAAY,IAAIJ,EAAwC,CAAA,CAAE,GACtE,CAACK,GAAoBC,CAAqB,IAAIN,EAElD,CAAA,CAAE,GACE,CAACO,GAAgBC,CAAiB,IAAIR,EAE1C,CAAA,CAAE,GACE,CAACS,GAAUC,CAAW,IAAIV,EAAwC,CAAA,CAAE,GACpEW,IAAOC,EAAQ,EAAE,eAAA7B,GAAe,GAChC,EAAE,SAAA8B,GAAS,OAAAC,GAAO,cAAAC,EAAA,IAAiBJ,GACnCK,IAAW,CAAC,CAACtB,GAEbuB,IAAY,CAACR,MAA4C;AAE7D,UAAMS,IADUT,EAAS,KAAK,CAACU,MAAYA,EAAQ,SAAS3B,CAAW,GAC7C,WAAW;AAAA,MACnC,CAAC0B,MAAaA,EAAS,aAAaxB;AAAA,IAAA;AAEtC,IAAIwB,KAAUJ,EAAM,EAAE,QAAQI,EAAS,eAAe;AAAA,EACxD;AAEAE,EAAAA;AAAAA,IACE,MACEnC,EAAY,eAAe,aAAa,EAAE,uBAAuB,IAAM;AAAA,IACzE,CAACwB,MAAa;AACZ,MAAAD,EAAkBC,EAAS,cAAe,GAC1CC,EAAYD,EAAS,QAAS,GAE9BQ,EAAUR,EAAS,QAAS,GAC5BQ,EAAUR,EAAS,cAAe;AAAA,IACpC;AAAA,IACA,CAAA;AAAA,EAAC;AAGH,QAAMY,IAAO,YAAY;AACvB,UAAMC,IAAaX,EAAK,UAAA,GAClBY,IAAkBd,EAAS,IAAI,CAACU,MAAY;AAChD,UAAIA,EAAQ,SAAS3B;AACnB,eAAO2B;AAGT,YAAMhB,KAAagB,EAAQ,aAAa,CAAA,GAAI,OAAO;AAAA,QACjD,UAAUG,EAAW;AAAA,QACrB,eAAeA,EAAW,UAAU,CAAA;AAAA,MAAC,CACtC;AAED,UAAIN,GAAU;AACZ,cAAMQ,IAAkBL,EAAQ,UAAW;AAAA,UACzC,CAACD,MAAaA,EAAS,aAAaxB;AAAA,QAAA;AAEtC,QAAA8B,EAAiB,gBAAgB;AAAA,UAC/B,GAAGA,EAAiB;AAAA,UACpB,GAAGF,EAAW;AAAA,QAAA;AAAA,MAElB;AAEA,aAAIN,IACKG,IAEF;AAAA,QACL,GAAGA;AAAA,QACH,WAAAhB;AAAAA,MAAA;AAAA,IAEJ,CAAC;AACD,QAAI;AACF,YAAMlB,EAAY,eAAe,eAAe;AAAA,QAC9C,UAAUsC;AAAA,QACV,gBAAAhB;AAAA,MAAA,CACD,GACDZ;AAAA,QACaR,EAAX6B,IAAa,0BAA6B,oBAAN;AAAA,QACpCS,GAAa;AAAA,MAAA,GAGfpC,EAASqC,EAAgB,EAAE,OAAAnC,GAAO,aAAAC,EAAA,CAAa,CAAC;AAAA,IAClD,SAASmC,GAAO;AACd,MAAA/B,EAASoB,IAAW,wBAAwB,oBAAoBW,CAAK;AAAA,IACvE;AAAA,EACF,GAEMC,IAAgBrB,EAAe;AAAA,IACnC,CAACqB,MAAkBA,EAAc,SAASpC;AAAA,EAAA,GAGtCqC,IAAsB5B,GAAe;AAAA,IACzC,CAACiB,MAAaA,EAAS,OAAOxB;AAAA,EAAA,GAG1BoC,IACJD,GAAqB,WAAW;AAAA,IAC9B,CAACE,MAAa;AACZ,YAAMC,IAAsBhB,IAAWe,EAAS,eAAe;AAC/D,aAAO;AAAA,QACL,GAAGA;AAAA,QACH,cAAcC;AAAA,MAAA;AAAA,IAElB;AAAA,EAAA;AAGJ,SACE,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,UAAUpB,IAAWtB,IAAeP,EAAE,aAAa;AAAA,QACnD,SAAO;AAAA,MAAA;AAAA,IAAA;AAAA,IAET,gBAAA8C,EAACI,GAAA,EAAY,SAAQ,SACnB,UAAA;AAAA,MAAA,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,cAAY;AAAA,UACZ,MAAK;AAAA,UACL,WAAU;AAAA,UACV,YAAY,CAAC,CAACV;AAAA,UAEd,UAAA;AAAA,YAAA,gBAAAO;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,OAAOpD,EAAE,cAAc;AAAA,gBACvB,SAAQ;AAAA,gBACR,WACEgB,EAAU,SAAS,KAAKA,EAAU,CAAC,EAAE,aAAc,KACjD,gBAAAgC;AAAA,kBAACK;AAAAA,kBAAA;AAAA,oBACC,UAAUrC,EAAU,CAAC,EAAE;AAAA,oBACvB,cAAa;AAAA,kBAAA;AAAA,gBAAA,IAEba,IACF,gBAAAmB;AAAA,kBAACK;AAAAA,kBAAA;AAAA,oBACC,UAAUX,GAAqB;AAAA,oBAC/B,cAAa;AAAA,kBAAA;AAAA,gBAAA,IAEb;AAAA,gBAGN,UAAA,gBAAAM;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,cAAa;AAAA,oBACb,SAAA5B;AAAA,oBACA,QAAQ,CAAC,EAAE,OAAA6B,EAAA,MACT,gBAAAP;AAAA,sBAACQ;AAAAA,sBAAA;AAAA,wBACC,UAAS;AAAA,wBACT,iBAAgB;AAAA,wBAChB,UAAU,CAACC,MAAW7C,EAA0B6C,CAAM;AAAA,wBACtD,UAAU,CAACC,MAAU;AACnB,0BAAA/B,EAAM,EAAE,GAAG/B,GAAe,UAAU8D,EAAM,SAAA,GAAY;AACtD,gCAAMC,IAAmB7C,GAAe;AAAA,4BACtC,CAAC8C,MAASA,EAAK,OAAOF;AAAA,0BAAA;AAExB,0BAAAzC,EAAa0C,KAAoB,EAAE,GACnCxC;AAAA,4BACEwC,IAAmB,CAAC,EAAE,cAAc,CAAA;AAAA,0BAAC,GAEvC/C,EAA0B,EAAK;AAAA,wBACjC;AAAA,wBACA,YAAYiB,IAAWtB,IAAegD,EAAM;AAAA,wBAC5C,SAASM,GAAc;AAAA,wBACvB,eAAY;AAAA,wBACZ,cAAY7D,EAAE,cAAc;AAAA,wBAC5B,QAAQW;AAAA,wBACR,WAAW;AAAA,wBACX,YAAYkB;AAAA,wBAEX,UAAAf,GAAe,IAAI,CAACgD,MACnB,gBAAAd;AAAA,0BAACe;AAAA,0BAAA;AAAA,4BACC,eAAaD,EAAO;AAAA,4BACpB,UAAUA,EAAO,OAAOP,EAAM;AAAA,4BAE9B,OAAOO,EAAO;AAAA,4BACd,aAAaA,EAAO;AAAA,4BAEnB,UAAAA,EAAO;AAAA,0BAAA;AAAA,0BAJHA,EAAO;AAAA,wBAAA,CAMf;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACH;AAAA,gBAAA;AAAA,cAEJ;AAAA,YAAA;AAAA,YAEF,gBAAAd,EAACgB,IAAA,EAAc,GAAGxC,GAChB,UAAA,gBAAAwB;AAAA,cAACiB;AAAA,cAAA;AAAA,gBACC,YACEpC,IAAWc,IAA0BzB;AAAA,cAAA;AAAA,YAAA,GAG3C;AAAA,YACC,CAACuB,KACA,gBAAAK,EAACoB,IAAA,EACC,UAAA;AAAA,cAAA,gBAAAlB;AAAA,gBAACmB;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,SAAS,MAAMvC,EAAaM,CAAI,EAAA;AAAA,kBAChC,eAAY;AAAA,kBAEX,UAAWlC,EAAX6B,IAAa,SAAY,KAAN;AAAA,gBAAW;AAAA,cAAA;AAAA,cAEjC,gBAAAmB;AAAA,gBAACmB;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,WAAW,CAACC,MACV,gBAAApB;AAAA,oBAACqB;AAAA,oBAAA;AAAA,sBACE,GAAGD;AAAA,sBACJ,IAAI7B,EAAgB,EAAE,OAAAnC,GAAO,aAAAC,GAAa;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAG9C,eAAY;AAAA,kBAEX,YAAE,QAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,YACb,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGHwB,KAAYY,KACX,gBAAAO,EAAC,OAAA,EAAI,WAAU,oBACb,UAAA,gBAAAA;AAAA,QAACmB;AAAA,QAAA;AAAA,UACC,WAAW,CAACC,MACV,gBAAApB,EAACqB,GAAA,EAAM,GAAGD,GAAO,IAAI7B,EAAgB,EAAE,OAAAnC,GAAO,aAAAC,EAAA,CAAa,EAAA,CAAG;AAAA,UAEhE,SAAQ;AAAA,UAEP,YAAE,MAAM;AAAA,QAAA;AAAA,MAAA,EACX,CACF;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;"}