theme.keycloak.v2.admin.resources.assets.PermissionDetails-D65ccxxC.js.map Maven / Gradle / Ivy
{"version":3,"file":"PermissionDetails-D65ccxxC.js","sources":["../../src/clients/authorization/ScopeSelect.tsx","../../src/clients/authorization/PermissionDetails.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport { KeycloakSelect, SelectVariant } from \"@keycloak/keycloak-ui-shared\";\nimport { SelectOption } from \"@patternfly/react-core\";\nimport { useRef, useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useFetch } from \"../../utils/useFetch\";\n\ntype ScopeSelectProps = {\n clientId: string;\n resourceId?: string;\n preSelected?: string;\n};\n\nexport const ScopeSelect = ({\n clientId,\n resourceId,\n preSelected,\n}: ScopeSelectProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n\n const {\n control,\n getValues,\n setValue,\n formState: { errors },\n } = useFormContext();\n\n const [scopes, setScopes] = useState([]);\n const [selectedScopes, setSelectedScopes] = useState(\n [],\n );\n const [search, setSearch] = useState(\"\");\n const [open, setOpen] = useState(false);\n const firstUpdate = useRef(true);\n\n const values: string[] | undefined = getValues(\"scopes\");\n\n const toSelectOptions = (scopes: ScopeRepresentation[]) =>\n scopes.map((scope) => (\n \n {scope.name}\n \n ));\n\n useFetch(\n async (): Promise => {\n if (!resourceId) {\n return adminClient.clients.listAllScopes(\n Object.assign(\n { id: clientId, deep: false },\n search === \"\" ? null : { name: search },\n ),\n );\n }\n\n if (resourceId && !firstUpdate.current) {\n setValue(\"scopes\", []);\n }\n\n firstUpdate.current = false;\n return adminClient.clients.listScopesByResource({\n id: clientId,\n resourceName: resourceId,\n });\n },\n (scopes) => {\n setScopes(scopes);\n if (!search)\n setSelectedScopes(\n scopes.filter((s: ScopeRepresentation) => values?.includes(s.id!)),\n );\n },\n [resourceId, search],\n );\n\n return (\n value.length > 0 }}\n render={({ field }) => (\n setOpen(val)}\n onFilter={(filter) => {\n setSearch(filter);\n return toSelectOptions(scopes);\n }}\n onClear={() => {\n field.onChange([]);\n setSearch(\"\");\n }}\n selections={selectedScopes.map((s) => s.name!)}\n onSelect={(selectedValue) => {\n const option =\n typeof selectedValue === \"string\"\n ? selectedScopes.find((s) => s.name === selectedValue)!\n : (selectedValue as ScopeRepresentation);\n const changedValue = selectedScopes.find((p) => p.id === option.id)\n ? selectedScopes.filter((p) => p.id !== option.id)\n : [...selectedScopes, option];\n\n field.onChange(changedValue.map((s) => s.id));\n setSelectedScopes(changedValue);\n setSearch(\"\");\n }}\n isOpen={open}\n aria-labelledby={t(\"scopes\")}\n validated={errors.scopes ? \"error\" : \"default\"}\n isDisabled={!!preSelected}\n typeAheadAriaLabel={t(\"scopes\")}\n >\n {toSelectOptions(scopes)}\n \n )}\n />\n );\n};\n","import type PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport { DecisionStrategy } from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport {\n FormErrorText,\n HelpItem,\n SelectVariant,\n TextAreaControl,\n TextControl,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n Radio,\n Switch,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, FormProvider, useForm, useWatch } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeycloakSpinner } from \"../../components/keycloak-spinner/KeycloakSpinner\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { toUpperCase } from \"../../util\";\nimport { useFetch } from \"../../utils/useFetch\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport type { NewPermissionParams } from \"../routes/NewPermission\";\nimport {\n PermissionDetailsParams,\n toPermissionDetails,\n} from \"../routes/PermissionDetails\";\nimport { ResourcesPolicySelect } from \"./ResourcesPolicySelect\";\nimport { ScopeSelect } from \"./ScopeSelect\";\n\ntype FormFields = PolicyRepresentation & {\n resourceType: string;\n};\n\nexport default function PermissionDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n\n const form = useForm({\n mode: \"onChange\",\n });\n const {\n control,\n reset,\n formState: { errors },\n handleSubmit,\n } = form;\n\n const navigate = useNavigate();\n const { id, realm, permissionType, permissionId, selectedId } = useParams<\n NewPermissionParams & PermissionDetailsParams\n >();\n\n const { addAlert, addError } = useAlerts();\n const [permission, setPermission] = useState();\n const [applyToResourceTypeFlag, setApplyToResourceTypeFlag] = useState(false);\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n async () => {\n if (!permissionId) {\n return {};\n }\n const [permission, resources, policies, scopes] = await Promise.all([\n adminClient.clients.findOnePermission({\n id,\n type: permissionType,\n permissionId,\n }),\n adminClient.clients.getAssociatedResources({\n id,\n permissionId,\n }),\n adminClient.clients.getAssociatedPolicies({\n id,\n permissionId,\n }),\n adminClient.clients.getAssociatedScopes({\n id,\n permissionId,\n }),\n ]);\n\n if (!permission) {\n throw new Error(t(\"notFound\"));\n }\n\n return {\n permission,\n resources: resources.map((r) => r._id),\n policies: policies.map((p) => p.id!),\n scopes: scopes.map((s) => s.id!),\n };\n },\n ({ permission, resources, policies, scopes }) => {\n reset({ ...permission, resources, policies, scopes });\n if (permission && \"resourceType\" in permission) {\n setApplyToResourceTypeFlag(\n !!(permission as { resourceType: string }).resourceType,\n );\n }\n setPermission({ ...permission, resources, policies });\n },\n [],\n );\n\n const save = async (permission: PolicyRepresentation) => {\n try {\n if (permissionId) {\n await adminClient.clients.updatePermission(\n { id, type: permissionType, permissionId },\n permission,\n );\n } else {\n const result = await adminClient.clients.createPermission(\n { id, type: permissionType },\n permission,\n );\n setPermission(result);\n navigate(\n toPermissionDetails({\n realm,\n id,\n permissionType,\n permissionId: result.id!,\n }),\n );\n }\n addAlert(\n t((permissionId ? \"update\" : \"create\") + \"PermissionSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"permissionSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deletePermission\",\n messageKey: t(\"deletePermissionConfirm\", {\n permission: permission?.name,\n }),\n continueButtonVariant: ButtonVariant.danger,\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delPermission({\n id,\n type: permissionType,\n permissionId: permissionId,\n });\n addAlert(t(\"permissionDeletedSuccess\"), AlertVariant.success);\n navigate(\n toAuthorizationTab({ realm, clientId: id, tab: \"permissions\" }),\n );\n } catch (error) {\n addError(\"permissionDeletedError\", error);\n }\n },\n });\n\n const resourcesIds = useWatch({\n control,\n name: \"resources\",\n defaultValue: [],\n });\n\n if (!permission) {\n return ;\n }\n\n return (\n <>\n \n toggleDeleteDialog()}\n >\n {t(\"delete\")}\n ,\n ]\n : undefined\n }\n />\n \n \n \n \n \n \n }\n >\n setApplyToResourceTypeFlag(val)}\n aria-label={t(\"applyToResourceTypeFlag\")}\n />\n \n {applyToResourceTypeFlag ? (\n \n ) : (\n \n }\n isRequired={permissionType !== \"scope\"}\n >\n \n {errors.resources && }\n \n )}\n {permissionType === \"scope\" && (\n \n }\n isRequired\n >\n \n {errors.scopes && }\n \n )}\n \n }\n >\n \n \n \n }\n fieldId=\"policyEnforcementMode\"\n hasNoPaddingTop\n >\n (\n <>\n {Object.values(DecisionStrategy).map((strategy) => (\n field.onChange(strategy)}\n label={t(`decisionStrategies.${strategy}`)}\n className=\"pf-v5-u-mb-md\"\n />\n ))}\n >\n )}\n />\n \n \n \n \n\n \n \n \n \n \n \n >\n );\n}\n"],"names":["ScopeSelect","clientId","resourceId","preSelected","adminClient","useAdminClient","t","useTranslation","control","getValues","setValue","errors","useFormContext","scopes","setScopes","useState","selectedScopes","setSelectedScopes","search","setSearch","open","setOpen","firstUpdate","useRef","values","toSelectOptions","scope","jsx","SelectOption","useFetch","s","Controller","value","field","KeycloakSelect","SelectVariant","val","filter","selectedValue","option","changedValue","PermissionDetails","form","useForm","reset","handleSubmit","navigate","useNavigate","id","realm","permissionType","permissionId","selectedId","useParams","addAlert","addError","useAlerts","permission","setPermission","applyToResourceTypeFlag","setApplyToResourceTypeFlag","hasAccess","useAccess","isDisabled","resources","policies","r","p","save","result","toPermissionDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","ButtonVariant","toAuthorizationTab","resourcesIds","useWatch","jsxs","Fragment","ViewHeader","toUpperCase","DropdownItem","PageSection","FormAccess","FormProvider","TextControl","TextAreaControl","FormGroup","HelpItem","Switch","_event","ResourcesPolicySelect","FormErrorText","DecisionStrategy","strategy","Radio","ActionGroup","Button","props","Link","KeycloakSpinner"],"mappings":"46CAeO,MAAMA,GAAc,CAAC,CAC1B,SAAAC,EACA,WAAAC,EACA,YAAAC,CACF,IAAwB,CAChB,KAAA,CAAE,YAAAC,GAAgBC,IAElB,CAAE,EAAAC,GAAMC,IAER,CACJ,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,UAAW,CAAE,OAAAC,CAAO,GAClBC,EAAe,EAEb,CAACC,EAAQC,CAAS,EAAIC,EAAgC,CAAE,CAAA,EACxD,CAACC,EAAgBC,CAAiB,EAAIF,EAC1C,CAAC,CAAA,EAEG,CAACG,EAAQC,CAAS,EAAIJ,EAAS,EAAE,EACjC,CAACK,EAAMC,CAAO,EAAIN,EAAS,EAAK,EAChCO,EAAcC,GAAO,EAAI,EAEzBC,EAA+Bf,EAAU,QAAQ,EAEjDgB,EAAmBZ,GACvBA,EAAO,IAAKa,GACTC,EAAAC,EAAA,CAA4B,MAAOF,EACjC,SAAAA,EAAM,IADU,EAAAA,EAAM,EAEzB,CACD,EAEH,OAAAG,EACE,SACO3B,GASDA,GAAc,CAACoB,EAAY,SACpBZ,EAAA,SAAU,CAAA,CAAE,EAGvBY,EAAY,QAAU,GACflB,EAAY,QAAQ,qBAAqB,CAC9C,GAAIH,EACJ,aAAcC,CAAA,CACf,GAhBQE,EAAY,QAAQ,cACzB,OAAO,OACL,CAAE,GAAIH,EAAU,KAAM,EAAM,EAC5BiB,IAAW,GAAK,KAAO,CAAE,KAAMA,CAAO,CACxC,CAAA,EAcLL,GAAW,CACVC,EAAUD,CAAM,EACXK,GACHD,EACEJ,EAAO,OAAQiB,GAA2BN,GAAQ,SAASM,EAAE,EAAG,CAAC,CAAA,CAEvE,EACA,CAAC5B,EAAYgB,CAAM,CAAA,EAInBS,EAACI,EAAA,CACC,KAAK,SACL,aAAc5B,EAAc,CAACA,CAAW,EAAI,CAAC,EAC7C,QAAAK,EACA,MAAO,CAAE,SAAWwB,GAAUA,EAAM,OAAS,CAAE,EAC/C,OAAQ,CAAC,CAAE,MAAAC,CAAA,IACTN,EAACO,EAAA,CACC,SAAS,SACT,QAASC,EAAc,eACvB,SAAWC,GAAQf,EAAQe,CAAG,EAC9B,SAAWC,IACTlB,EAAUkB,CAAM,EACTZ,EAAgBZ,CAAM,GAE/B,QAAS,IAAM,CACPoB,EAAA,SAAS,CAAA,CAAE,EACjBd,EAAU,EAAE,CACd,EACA,WAAYH,EAAe,IAAKc,GAAMA,EAAE,IAAK,EAC7C,SAAWQ,GAAkB,CACrB,MAAAC,EACJ,OAAOD,GAAkB,SACrBtB,EAAe,KAAMc,GAAMA,EAAE,OAASQ,CAAa,EAClDA,EACDE,EAAexB,EAAe,KAAM,GAAM,EAAE,KAAOuB,EAAO,EAAE,EAC9DvB,EAAe,OAAQ,GAAM,EAAE,KAAOuB,EAAO,EAAE,EAC/C,CAAC,GAAGvB,EAAgBuB,CAAM,EAE9BN,EAAM,SAASO,EAAa,IAAKV,GAAMA,EAAE,EAAE,CAAC,EAC5Cb,EAAkBuB,CAAY,EAC9BrB,EAAU,EAAE,CACd,EACA,OAAQC,EACR,kBAAiBd,EAAE,QAAQ,EAC3B,UAAWK,EAAO,OAAS,QAAU,UACrC,WAAY,CAAC,CAACR,EACd,mBAAoBG,EAAE,QAAQ,EAE7B,WAAgBO,CAAM,CAAA,CACzB,CAAA,CAAA,CAIR,EC5EA,SAAwB4B,IAAoB,CACpC,KAAA,CAAE,YAAArC,GAAgBC,IAElB,CAAE,EAAAC,GAAMC,IAERmC,EAAOC,EAAoB,CAC/B,KAAM,UAAA,CACP,EACK,CACJ,QAAAnC,EACA,MAAAoC,EACA,UAAW,CAAE,OAAAjC,CAAO,EACpB,aAAAkC,CACE,EAAAH,EAEEI,EAAWC,IACX,CAAE,GAAAC,EAAI,MAAAC,EAAO,eAAAC,EAAgB,aAAAC,EAAc,WAAAC,CAAA,EAAeC,KAI1D,CAAE,SAAAC,EAAU,SAAAC,CAAS,EAAIC,GAAU,EACnC,CAACC,EAAYC,CAAa,EAAI3C,EAA+B,EAC7D,CAAC4C,EAAyBC,CAA0B,EAAI7C,EAAS,EAAK,EACtE,CAAE,UAAA8C,GAAcC,KAEhBC,EAAa,CAACF,EAAU,sBAAsB,EAEpDhC,EACE,SAAY,CACV,GAAI,CAACsB,EACH,MAAO,GAEH,KAAA,CAACM,EAAYO,EAAWC,EAAUpD,CAAM,EAAI,MAAM,QAAQ,IAAI,CAClET,EAAY,QAAQ,kBAAkB,CACpC,GAAA4C,EACA,KAAME,EACN,aAAAC,CAAA,CACD,EACD/C,EAAY,QAAQ,uBAAuB,CACzC,GAAA4C,EACA,aAAAG,CAAA,CACD,EACD/C,EAAY,QAAQ,sBAAsB,CACxC,GAAA4C,EACA,aAAAG,CAAA,CACD,EACD/C,EAAY,QAAQ,oBAAoB,CACtC,GAAA4C,EACA,aAAAG,CAAA,CACD,CAAA,CACF,EAED,GAAI,CAACM,EACH,MAAM,IAAI,MAAMnD,EAAE,UAAU,CAAC,EAGxB,MAAA,CACL,WAAAmD,EACA,UAAWO,EAAU,IAAKE,GAAMA,EAAE,GAAG,EACrC,SAAUD,EAAS,IAAKE,GAAMA,EAAE,EAAG,EACnC,OAAQtD,EAAO,IAAKiB,GAAMA,EAAE,EAAG,CAAA,CAEnC,EACA,CAAC,CAAE,WAAA2B,EAAY,UAAAO,EAAW,SAAAC,EAAU,OAAApD,KAAa,CAC/C+B,EAAM,CAAE,GAAGa,EAAY,UAAAO,EAAW,SAAAC,EAAU,OAAApD,EAAQ,EAChD4C,GAAc,iBAAkBA,GAClCG,EACE,CAAC,CAAEH,EAAwC,YAAA,EAG/CC,EAAc,CAAE,GAAGD,EAAY,UAAAO,EAAW,SAAAC,CAAU,CAAA,CACtD,EACA,CAAC,CAAA,EAGG,MAAAG,EAAO,MAAOX,GAAqC,CACnD,GAAA,CACF,GAAIN,EACF,MAAM/C,EAAY,QAAQ,iBACxB,CAAE,GAAA4C,EAAI,KAAME,EAAgB,aAAAC,CAAa,EACzCM,CAAA,MAEG,CACC,MAAAY,EAAS,MAAMjE,EAAY,QAAQ,iBACvC,CAAE,GAAA4C,EAAI,KAAME,CAAe,EAC3BO,CAAA,EAEFC,EAAcW,CAAM,EACpBvB,EACEwB,GAAoB,CAClB,MAAArB,EACA,GAAAD,EACA,eAAAE,EACA,aAAcmB,EAAO,EAAA,CACtB,CAAA,CAEL,CACAf,EACEhD,GAAG6C,EAAe,SAAW,UAAY,mBAAmB,EAC5DoB,EAAa,OAAA,QAERC,EAAO,CACdjB,EAAS,sBAAuBiB,CAAK,CACvC,CAAA,EAGI,CAACC,EAAoBC,CAAa,EAAIC,GAAiB,CAC3D,SAAU,mBACV,WAAYrE,EAAE,0BAA2B,CACvC,WAAYmD,GAAY,IAAA,CACzB,EACD,sBAAuBmB,EAAc,OACrC,oBAAqB,UACrB,UAAW,SAAY,CACjB,GAAA,CACI,MAAAxE,EAAY,QAAQ,cAAc,CACtC,GAAA4C,EACA,KAAME,EACN,aAAAC,CAAA,CACD,EACDG,EAAShD,EAAE,0BAA0B,EAAGiE,EAAa,OAAO,EAC5DzB,EACE+B,EAAmB,CAAE,MAAA5B,EAAO,SAAUD,EAAI,IAAK,cAAe,CAAA,QAEzDwB,EAAO,CACdjB,EAAS,yBAA0BiB,CAAK,CAC1C,CACF,CAAA,CACD,EAEKM,EAAeC,GAAS,CAC5B,QAAAvE,EACA,KAAM,YACN,aAAc,CAAC,CAAA,CAChB,EAED,OAAKiD,EAMDuB,EAAAC,EAAA,CAAA,SAAA,CAAAtD,EAAC+C,EAAc,EAAA,EACf/C,EAACuD,GAAA,CACC,SACE/B,EACIM,EAAW,KACX,SAAS0B,GAAYjC,CAAc,CAAC,kBAE1C,cACEC,EACI,CACExB,EAACyD,GAAA,CAEC,cAAY,kBACZ,WAAArB,EACA,QAAS,IAAMU,EAAmB,EAEjC,WAAE,QAAQ,CAAA,EALP,QAMN,CAEF,EAAA,MAAA,CAER,EACA9C,EAAC0D,GAAY,CAAA,QAAQ,QACnB,SAAA1D,EAAC2D,GAAA,CACC,aAAY,GACZ,KAAK,uBACL,SAAUzC,EAAauB,CAAI,EAE3B,SAAAY,EAACO,GAAc,CAAA,GAAG7C,EAChB,SAAA,CAAAf,EAAC6D,EAAA,CACC,KAAK,OACL,MAAOlF,EAAE,MAAM,EACf,UAAWA,EAAE,gBAAgB,EAC7B,MAAO,CACL,SAAUA,EAAE,UAAU,CACxB,CAAA,CACF,EACAqB,EAAC8D,GAAA,CACC,KAAK,cACL,MAAOnF,EAAE,aAAa,EACtB,UAAWA,EAAE,uBAAuB,EACpC,MAAO,CACL,UAAW,CACT,MAAO,IACP,QAASA,EAAE,YAAa,CAAE,OAAQ,IAAK,CACzC,CACF,CAAA,CACF,EACAqB,EAAC+D,EAAA,CACC,MAAOpF,EAAE,yBAAyB,EAClC,QAAQ,0BACR,UACEqB,EAACgE,EAAA,CACC,SAAUrF,EAAE,6BAA6B,EACzC,aAAa,yBAAA,CACf,EAGF,SAAAqB,EAACiE,GAAA,CACC,GAAG,0BACH,KAAK,0BACL,MAAOtF,EAAE,IAAI,EACb,SAAUA,EAAE,KAAK,EACjB,UAAWqD,EACX,SAAU,CAACkC,EAAQzD,IAAQwB,EAA2BxB,CAAG,EACzD,aAAY9B,EAAE,yBAAyB,CAAA,CACzC,CAAA,CACF,EACCqD,EACChC,EAAC6D,EAAA,CACC,KAAK,eACL,MAAOlF,EAAE,cAAc,EACvB,UAAWA,EAAE,kBAAkB,EAC/B,MAAO,CACL,SAAU,CACR,MAAO4C,IAAmB,QAC1B,QAAS5C,EAAE,UAAU,CACvB,CACF,CAAA,CAAA,EAGF0E,EAACU,EAAA,CACC,MAAOpF,EAAE,UAAU,EACnB,QAAQ,YACR,UACEqB,EAACgE,EAAA,CACC,SAAUrF,EAAE,qBAAqB,EACjC,aAAa,WAAA,CACf,EAEF,WAAY4C,IAAmB,QAE/B,SAAA,CAAAvB,EAACmE,EAAA,CACC,KAAK,YACL,SAAU9C,EACV,aAAAG,EACA,YACED,IAAmB,QAAU,OAAYE,EAE3C,QACEF,IAAmB,QACff,EAAc,UACdA,EAAc,eAEpB,WAAYe,IAAmB,OAAA,CACjC,EACCvC,EAAO,WAAagB,EAACoE,GAAc,QAASzF,EAAE,UAAU,EAAG,CAAA,CAAA,CAC9D,EAED4C,IAAmB,SAClB8B,EAACU,EAAA,CACC,MAAOpF,EAAE,qBAAqB,EAC9B,QAAQ,SACR,UACEqB,EAACgE,EAAA,CACC,SAAUrF,EAAE,sBAAsB,EAClC,aAAa,cAAA,CACf,EAEF,WAAU,GAEV,SAAA,CAAAqB,EAAC3B,GAAA,CACC,SAAUgD,EACV,WAAY8B,IAAe,CAAC,EAC5B,YAAa1B,CAAA,CACf,EACCzC,EAAO,QAAUgB,EAACoE,GAAc,QAASzF,EAAE,UAAU,EAAG,CAAA,CAAA,CAC3D,EAEFqB,EAAC+D,EAAA,CACC,MAAOpF,EAAE,UAAU,EACnB,QAAQ,WACR,UACEqB,EAACgE,EAAA,CACC,SAAUrF,EAAE,wBAAwB,EACpC,aAAa,UAAA,CACf,EAGF,SAAAqB,EAACmE,EAAA,CACC,KAAK,WACL,SAAU9C,EACV,aAAAG,CAAA,CACF,CAAA,CACF,EACAxB,EAAC+D,EAAA,CACC,MAAOpF,EAAE,kBAAkB,EAC3B,UACEqB,EAACgE,EAAA,CACC,SAAUrF,EAAE,gCAAgC,EAC5C,aAAa,kBAAA,CACf,EAEF,QAAQ,wBACR,gBAAe,GAEf,SAAAqB,EAACI,EAAA,CACC,KAAK,mBACL,cAAY,mBACZ,aAAciE,EAAiB,UAC/B,QAAAxF,EACA,OAAQ,CAAC,CAAE,MAAAyB,CACT,IAAAN,EAAAsD,EAAA,CACG,SAAO,OAAA,OAAOe,CAAgB,EAAE,IAAKC,GACpCtE,EAACuE,GAAA,CACC,GAAID,EAEJ,cAAaA,EACb,UAAWhE,EAAM,QAAUgE,EAC3B,WAAAlC,EACA,KAAK,qBACL,SAAU,IAAM9B,EAAM,SAASgE,CAAQ,EACvC,MAAO3F,EAAE,sBAAsB2F,CAAQ,EAAE,EACzC,UAAU,eAAA,EAPLA,CASR,CAAA,EACH,CAAA,CAEJ,CAAA,CACF,EACCtE,EAAAwE,GAAA,CACC,SAACnB,EAAA,MAAA,CAAI,UAAU,gBACb,SAAA,CAAArD,EAACyE,EAAA,CACC,QAASxB,EAAc,QACvB,KAAK,SACL,cAAY,OAEX,WAAE,MAAM,CAAA,CACX,EAEAjD,EAACyE,EAAA,CACC,QAAQ,OACR,cAAY,SACZ,UAAYC,GACV1E,EAAC2E,GAAA,CACE,GAAGD,EACJ,GAAIxB,EAAmB,CACrB,MAAA5B,EACA,SAAUD,EACV,IAAK,aAAA,CACN,CAAA,CACF,EAGF,WAAE,QAAQ,CAAA,CACb,CAAA,CAAA,CACF,CACF,CAAA,CAAA,EACF,CAAA,CAAA,EAEJ,CACF,CAAA,CAAA,IAxNQuD,GAAgB,CAAA,CAAA,CA0N5B"}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy