All Downloads are FREE. Search and download functionalities are using the official Maven repository.

theme.keycloak.v2.admin.resources.assets.AttributesGroupDetails-Ccdzh65G.js.map Maven / Gradle / Ivy

There is a newer version: 26.0.7
Show newest version
{"version":3,"file":"AttributesGroupDetails-Ccdzh65G.js","sources":["../../src/realm-settings/user-profile/AttributesGroupForm.tsx","../../src/realm-settings/user-profile/AttributesGroupDetails.tsx"],"sourcesContent":["import type { UserProfileGroup } from \"@keycloak/keycloak-admin-client/lib/defs/userProfileMetadata\";\nimport { HelpItem, TextControl } from \"@keycloak/keycloak-ui-shared\";\nimport {\n  ActionGroup,\n  Alert,\n  Button,\n  FormGroup,\n  Grid,\n  GridItem,\n  PageSection,\n  Text,\n  TextContent,\n  TextInput,\n} from \"@patternfly/react-core\";\nimport { GlobeRouteIcon } from \"@patternfly/react-icons\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n  FormProvider,\n  SubmitHandler,\n  useForm,\n  useWatch,\n} from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate, useParams } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\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 { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport { useFetch } from \"../../utils/useFetch\";\nimport useLocale from \"../../utils/useLocale\";\nimport useToggle from \"../../utils/useToggle\";\nimport \"../realm-settings-section.css\";\nimport type { EditAttributesGroupParams } from \"../routes/EditAttributesGroup\";\nimport { toUserProfile } from \"../routes/UserProfile\";\nimport { useUserProfile } from \"./UserProfileContext\";\nimport {\n  AddTranslationsDialog,\n  TranslationsType,\n} from \"./attribute/AddTranslationsDialog\";\n\nfunction parseAnnotations(input: Record): KeyValueType[] {\n  return Object.entries(input).reduce((p, [key, value]) => {\n    if (typeof value === \"string\") {\n      return [...p, { key, value }];\n    } else {\n      return [...p];\n    }\n  }, [] as KeyValueType[]);\n}\n\nfunction transformAnnotations(input: KeyValueType[]): Record {\n  return Object.fromEntries(\n    input\n      .filter((annotation) => annotation.key.length > 0)\n      .map((annotation) => [annotation.key, annotation.value] as const),\n  );\n}\n\ntype FormFields = Required> & {\n  annotations: KeyValueType[];\n};\n\ntype TranslationForm = {\n  locale: string;\n  value: string;\n};\n\ntype Translations = {\n  key: string;\n  translations: TranslationForm[];\n};\n\ntype TranslationsSets = {\n  displayHeader: Translations;\n  displayDescription: Translations;\n};\n\nconst defaultValues: FormFields = {\n  annotations: [],\n  displayDescription: \"\",\n  displayHeader: \"\",\n  name: \"\",\n};\n\nexport default function AttributesGroupForm() {\n  const { adminClient } = useAdminClient();\n  const { t } = useTranslation();\n  const { realm: realmName, realmRepresentation: realm } = useRealm();\n  const { config, save } = useUserProfile();\n  const navigate = useNavigate();\n  const combinedLocales = useLocale();\n  const params = useParams();\n  const form = useForm({ defaultValues });\n  const { addError } = useAlerts();\n  const editMode = params.name ? true : false;\n  const [newAttributesGroupName, setNewAttributesGroupName] = useState(\"\");\n  const [\n    generatedAttributesGroupDisplayName,\n    setGeneratedAttributesGroupDisplayName,\n  ] = useState(\"\");\n  const [\n    generatedAttributesGroupDisplayDescription,\n    setGeneratedAttributesGroupDisplayDescription,\n  ] = useState(\"\");\n  const [addTranslationsModalOpen, toggleModal] = useToggle();\n  const regexPattern = /\\$\\{([^}]+)\\}/;\n  const [type, setType] = useState();\n  const [translationsData, setTranslationsData] = useState({\n    displayHeader: {\n      key: \"\",\n      translations: [],\n    },\n    displayDescription: {\n      key: \"\",\n      translations: [],\n    },\n  });\n\n  const matchingGroup = useMemo(\n    () => config?.groups?.find(({ name }) => name === params.name),\n    [config?.groups],\n  );\n\n  useEffect(() => {\n    if (!matchingGroup) {\n      return;\n    }\n\n    const annotations = matchingGroup.annotations\n      ? parseAnnotations(matchingGroup.annotations)\n      : [];\n\n    form.reset({ ...defaultValues, ...matchingGroup, annotations });\n  }, [matchingGroup]);\n\n  useEffect(() => {\n    form.setValue(\n      \"displayHeader\",\n      matchingGroup\n        ? matchingGroup.displayHeader!\n        : generatedAttributesGroupDisplayName,\n    );\n    form.setValue(\n      \"displayDescription\",\n      matchingGroup\n        ? matchingGroup.displayDescription!\n        : generatedAttributesGroupDisplayDescription,\n    );\n  }, [\n    generatedAttributesGroupDisplayName,\n    generatedAttributesGroupDisplayDescription,\n  ]);\n\n  useFetch(\n    async () => {\n      const translationsToSaveDisplayHeader: Translations[] = [];\n      const translationsToSaveDisplayDescription: Translations[] = [];\n      const formData = form.getValues();\n\n      const translationsResults = await Promise.all(\n        combinedLocales.map(async (selectedLocale) => {\n          try {\n            const translations =\n              await adminClient.realms.getRealmLocalizationTexts({\n                realm: realmName,\n                selectedLocale,\n              });\n\n            const formattedDisplayHeaderKey = formData.displayHeader?.substring(\n              2,\n              formData.displayHeader.length - 1,\n            );\n            const formattedDisplayDescriptionKey =\n              formData.displayDescription?.substring(\n                2,\n                formData.displayDescription.length - 1,\n              );\n\n            return {\n              locale: selectedLocale,\n              headerTranslation: translations[formattedDisplayHeaderKey] ?? \"\",\n              descriptionTranslation:\n                translations[formattedDisplayDescriptionKey] ?? \"\",\n            };\n          } catch (error) {\n            console.error(\n              `Error fetching translations for ${selectedLocale}:`,\n              error,\n            );\n            return null;\n          }\n        }),\n      );\n\n      translationsResults.forEach((translationsResult) => {\n        if (translationsResult) {\n          const { locale, headerTranslation, descriptionTranslation } =\n            translationsResult;\n          translationsToSaveDisplayHeader.push({\n            key: formData.displayHeader?.substring(\n              2,\n              formData.displayHeader.length - 1,\n            ),\n            translations: [\n              {\n                locale,\n                value: headerTranslation,\n              },\n            ],\n          });\n          translationsToSaveDisplayDescription.push({\n            key: formData.displayDescription?.substring(\n              2,\n              formData.displayDescription.length - 1,\n            ),\n            translations: [\n              {\n                locale,\n                value: descriptionTranslation,\n              },\n            ],\n          });\n        }\n      });\n\n      return {\n        translationsToSaveDisplayHeader,\n        translationsToSaveDisplayDescription,\n      };\n    },\n    (data) => {\n      setTranslationsData({\n        displayHeader: {\n          key: data.translationsToSaveDisplayHeader[0].key,\n          translations: data.translationsToSaveDisplayHeader.flatMap(\n            (translationData) => translationData.translations,\n          ),\n        },\n        displayDescription: {\n          key: data.translationsToSaveDisplayDescription[0].key,\n          translations: data.translationsToSaveDisplayDescription.flatMap(\n            (translationData) => translationData.translations,\n          ),\n        },\n      });\n    },\n    [combinedLocales],\n  );\n\n  const saveTranslations = async () => {\n    const addLocalization = async (\n      key: string,\n      locale: string,\n      value: string,\n    ) => {\n      try {\n        await adminClient.realms.addLocalization(\n          {\n            realm: realmName,\n            selectedLocale: locale,\n            key: key,\n          },\n          value,\n        );\n      } catch (error) {\n        console.error(\n          `Error saving translation for locale ${locale}: ${error}`,\n        );\n      }\n    };\n\n    try {\n      if (\n        translationsData.displayHeader &&\n        translationsData.displayHeader.translations.length > 0\n      ) {\n        for (const translation of translationsData.displayHeader.translations) {\n          await addLocalization(\n            translationsData.displayHeader.key,\n            translation.locale,\n            translation.value,\n          );\n        }\n      }\n\n      if (\n        translationsData.displayDescription &&\n        translationsData.displayDescription.translations.length > 0\n      ) {\n        for (const translation of translationsData.displayDescription\n          .translations) {\n          await addLocalization(\n            translationsData.displayDescription.key,\n            translation.locale,\n            translation.value,\n          );\n        }\n      }\n    } catch (error) {\n      console.error(`Error while processing translations: ${error}`);\n    }\n  };\n\n  const onSubmit: SubmitHandler = async (values) => {\n    if (!config) {\n      return;\n    }\n\n    const groups = [...(config.groups ?? [])];\n    const updateAt = matchingGroup ? groups.indexOf(matchingGroup) : -1;\n    const updatedGroup: UserProfileGroup = {\n      ...values,\n      annotations: transformAnnotations(values.annotations),\n    };\n\n    if (updateAt === -1) {\n      groups.push(updatedGroup);\n    } else {\n      groups[updateAt] = updatedGroup;\n    }\n\n    if (realm?.internationalizationEnabled) {\n      const hasNonEmptyDisplayHeaderTranslations =\n        translationsData.displayHeader.translations.some(\n          (translation) => translation.value.trim() !== \"\",\n        );\n\n      const hasNonEmptyDisplayDescriptionTranslations =\n        translationsData.displayDescription.translations.some(\n          (translation) => translation.value.trim() !== \"\",\n        );\n\n      if (\n        !hasNonEmptyDisplayHeaderTranslations ||\n        !hasNonEmptyDisplayDescriptionTranslations\n      ) {\n        addError(\"createAttributeError\", t(\"translationError\"));\n        return;\n      }\n    }\n\n    const success = await save({ ...config, groups });\n\n    if (success) {\n      await saveTranslations();\n      navigate(toUserProfile({ realm: realmName, tab: \"attributes-group\" }));\n    }\n  };\n\n  const attributesGroupDisplayName = useWatch({\n    control: form.control,\n    name: \"displayHeader\",\n  });\n\n  const attributesGroupDisplayDescription = useWatch({\n    control: form.control,\n    name: \"displayDescription\",\n  });\n\n  const handleAttributesGroupNameChange = (\n    event: React.FormEvent,\n    value: string,\n  ) => {\n    const newDisplayName =\n      value !== \"\" && realm?.internationalizationEnabled\n        ? \"${profile.attribute-group.\" + `${value}}`\n        : \"\";\n    const newDisplayDescription =\n      value !== \"\" && realm?.internationalizationEnabled\n        ? \"${profile.attribute-group-description.\" + `${value}}`\n        : \"\";\n    setNewAttributesGroupName(value);\n    setGeneratedAttributesGroupDisplayName(newDisplayName);\n    setGeneratedAttributesGroupDisplayDescription(newDisplayDescription);\n  };\n\n  const attributesGroupDisplayPatternMatch = regexPattern.test(\n    attributesGroupDisplayName || attributesGroupDisplayDescription,\n  );\n\n  const formattedAttributesGroupDisplayName =\n    attributesGroupDisplayName?.substring(\n      2,\n      attributesGroupDisplayName.length - 1,\n    );\n  const formattedAttributesGroupDisplayDescription =\n    attributesGroupDisplayDescription?.substring(\n      2,\n      attributesGroupDisplayDescription.length - 1,\n    );\n\n  const handleHeaderTranslationsAdded = (headerTranslations: Translations) => {\n    setTranslationsData((prev) => ({\n      ...prev,\n      displayHeader: headerTranslations,\n    }));\n  };\n\n  const handleDescriptionTranslationsAdded = (\n    descriptionTranslations: Translations,\n  ) => {\n    setTranslationsData((prev) => ({\n      ...prev,\n      displayDescription: descriptionTranslations,\n    }));\n  };\n\n  const handleToggleDialog = () => {\n    toggleModal();\n  };\n\n  const groupDisplayNameKey =\n    type === \"displayHeader\"\n      ? formattedAttributesGroupDisplayName\n      : `profile.attribute-group.${newAttributesGroupName}`;\n  const groupDisplayDescriptionKey =\n    type === \"displayDescription\"\n      ? formattedAttributesGroupDisplayDescription\n      : `profile.attribute-group-description.${newAttributesGroupName}`;\n\n  return (\n    <>\n      {addTranslationsModalOpen && (\n         {\n            toggleModal();\n          }}\n        />\n      )}\n      \n      \n        \n          \n             {\n                  handleAttributesGroupNameChange(event, event.target.value);\n                },\n              }}\n            />\n            {!!matchingGroup && (\n              \n            )}\n            \n              }\n              fieldId=\"kc-attributes-group-display-header\"\n            >\n              \n                \n                  \n                  {generatedAttributesGroupDisplayName && (\n                    \n                  )}\n                \n                {realm?.internationalizationEnabled && (\n                  \n                     {\n                        setType(\"displayHeader\");\n                        toggleModal();\n                      }}\n                      icon={}\n                    />\n                  \n                )}\n              \n            \n            \n              }\n              fieldId=\"kc-attributes-group-display-description\"\n            >\n              \n                \n                  \n                  {generatedAttributesGroupDisplayDescription && (\n                    \n                  )}\n                \n                {realm?.internationalizationEnabled && (\n                  \n                     {\n                        setType(\"displayDescription\");\n                        toggleModal();\n                      }}\n                      icon={}\n                    />\n                  \n                )}\n              \n            \n            \n              {t(\"annotationsText\")}\n            \n            \n              \n            \n            \n              \n                {t(\"save\")}\n              \n               (\n                  \n                )}\n              >\n                {t(\"cancel\")}\n              \n            \n          \n        \n      \n    \n  );\n}\n","import AttributesGroupForm from \"./AttributesGroupForm\";\nimport { UserProfileProvider } from \"./UserProfileContext\";\n\nconst AttributesGroupDetails = () => (\n  \n    \n  \n);\n\nexport default AttributesGroupDetails;\n"],"names":["parseAnnotations","input","p","key","value","transformAnnotations","annotation","defaultValues","AttributesGroupForm","adminClient","useAdminClient","t","useTranslation","realmName","realm","useRealm","config","save","useUserProfile","navigate","useNavigate","combinedLocales","useLocale","params","useParams","form","useForm","addError","useAlerts","editMode","newAttributesGroupName","setNewAttributesGroupName","useState","generatedAttributesGroupDisplayName","setGeneratedAttributesGroupDisplayName","generatedAttributesGroupDisplayDescription","setGeneratedAttributesGroupDisplayDescription","addTranslationsModalOpen","toggleModal","useToggle","regexPattern","type","setType","translationsData","setTranslationsData","matchingGroup","useMemo","name","useEffect","annotations","useFetch","translationsToSaveDisplayHeader","translationsToSaveDisplayDescription","formData","selectedLocale","translations","formattedDisplayHeaderKey","formattedDisplayDescriptionKey","error","translationsResult","locale","headerTranslation","descriptionTranslation","data","translationData","saveTranslations","addLocalization","translation","onSubmit","values","groups","updateAt","updatedGroup","hasNonEmptyDisplayHeaderTranslations","hasNonEmptyDisplayDescriptionTranslations","toUserProfile","attributesGroupDisplayName","useWatch","attributesGroupDisplayDescription","handleAttributesGroupNameChange","event","newDisplayName","newDisplayDescription","attributesGroupDisplayPatternMatch","formattedAttributesGroupDisplayName","formattedAttributesGroupDisplayDescription","handleHeaderTranslationsAdded","headerTranslations","prev","handleDescriptionTranslationsAdded","descriptionTranslations","handleToggleDialog","groupDisplayNameKey","groupDisplayDescriptionKey","jsxs","Fragment","jsx","AddTranslationsDialog","ViewHeader","PageSection","FormAccess","FormProvider","TextControl","FormGroup","HelpItem","Grid","GridItem","TextInput","Alert","Button","GlobeRouteIcon","TextContent","Text","KeyValueInput","ActionGroup","props","Link","AttributesGroupDetails","UserProfileProvider"],"mappings":"iiCA2CA,SAASA,GAAiBC,EAAgD,CACjE,OAAA,OAAO,QAAQA,CAAK,EAAE,OAAO,CAACC,EAAG,CAACC,EAAKC,CAAK,IAC7C,OAAOA,GAAU,SACZ,CAAC,GAAGF,EAAG,CAAE,IAAAC,EAAK,MAAAC,CAAO,CAAA,EAErB,CAAC,GAAGF,CAAC,EAEb,CAAoB,CAAA,CACzB,CAEA,SAASG,GAAqBJ,EAAgD,CAC5E,OAAO,OAAO,YACZA,EACG,OAAQK,GAAeA,EAAW,IAAI,OAAS,CAAC,EAChD,IAAKA,GAAe,CAACA,EAAW,IAAKA,EAAW,KAAK,CAAU,CAAA,CAEtE,CAqBA,MAAMC,EAA4B,CAChC,YAAa,CAAC,EACd,mBAAoB,GACpB,cAAe,GACf,KAAM,EACR,EAEA,SAAwBC,IAAsB,CACtC,KAAA,CAAE,YAAAC,GAAgBC,KAClB,CAAE,EAAAC,GAAMC,KACR,CAAE,MAAOC,EAAW,oBAAqBC,CAAA,EAAUC,KACnD,CAAE,OAAAC,EAAQ,KAAAC,CAAK,EAAIC,GAAe,EAClCC,EAAWC,KACXC,EAAkBC,KAClBC,EAASC,KACTC,EAAOC,GAAoB,CAAE,cAAAnB,CAAe,CAAA,EAC5C,CAAE,SAAAoB,GAAaC,KACfC,EAAW,EAAAN,EAAO,KAClB,CAACO,EAAwBC,CAAyB,EAAIC,EAAS,EAAE,EACjE,CACJC,EACAC,CAAA,EACEF,EAAS,EAAE,EACT,CACJG,EACAC,CAAA,EACEJ,EAAS,EAAE,EACT,CAACK,EAA0BC,CAAW,EAAIC,GAAU,EACpDC,EAAe,gBACf,CAACC,EAAMC,CAAO,EAAIV,EAA2B,EAC7C,CAACW,EAAkBC,CAAmB,EAAIZ,EAA2B,CACzE,cAAe,CACb,IAAK,GACL,aAAc,CAAC,CACjB,EACA,mBAAoB,CAClB,IAAK,GACL,aAAc,CAAC,CACjB,CAAA,CACD,EAEKa,EAAgBC,GACpB,IAAM9B,GAAQ,QAAQ,KAAK,CAAC,CAAE,KAAA+B,KAAWA,IAASxB,EAAO,IAAI,EAC7D,CAACP,GAAQ,MAAM,CAAA,EAGjBgC,EAAU,IAAM,CACd,GAAI,CAACH,EACH,OAGF,MAAMI,EAAcJ,EAAc,YAC9B7C,GAAiB6C,EAAc,WAAW,EAC1C,GAEJpB,EAAK,MAAM,CAAE,GAAGlB,EAAe,GAAGsC,EAAe,YAAAI,EAAa,CAAA,EAC7D,CAACJ,CAAa,CAAC,EAElBG,EAAU,IAAM,CACTvB,EAAA,SACH,gBACAoB,EACIA,EAAc,cACdZ,CAAA,EAEDR,EAAA,SACH,qBACAoB,EACIA,EAAc,mBACdV,CAAA,CACN,EACC,CACDF,EACAE,CAAA,CACD,EAEDe,GACE,SAAY,CACV,MAAMC,EAAkD,CAAA,EAClDC,EAAuD,CAAA,EACvDC,EAAW5B,EAAK,YAqCF,OAnCQ,MAAM,QAAQ,IACxCJ,EAAgB,IAAI,MAAOiC,GAAmB,CACxC,GAAA,CACF,MAAMC,EACJ,MAAM9C,EAAY,OAAO,0BAA0B,CACjD,MAAOI,EACP,eAAAyC,CAAA,CACD,EAEGE,EAA4BH,EAAS,eAAe,UACxD,EACAA,EAAS,cAAc,OAAS,CAAA,EAE5BI,EACJJ,EAAS,oBAAoB,UAC3B,EACAA,EAAS,mBAAmB,OAAS,CAAA,EAGlC,MAAA,CACL,OAAQC,EACR,kBAAmBC,EAAaC,CAAyB,GAAK,GAC9D,uBACED,EAAaE,CAA8B,GAAK,EAAA,QAE7CC,EAAO,CACN,eAAA,MACN,mCAAmCJ,CAAc,IACjDI,CAAA,EAEK,IACT,CAAA,CACD,CAAA,GAGiB,QAASC,GAAuB,CAClD,GAAIA,EAAoB,CACtB,KAAM,CAAE,OAAAC,EAAQ,kBAAAC,EAAmB,uBAAAC,CAAA,EACjCH,EACFR,EAAgC,KAAK,CACnC,IAAKE,EAAS,eAAe,UAC3B,EACAA,EAAS,cAAc,OAAS,CAClC,EACA,aAAc,CACZ,CACE,OAAAO,EACA,MAAOC,CACT,CACF,CAAA,CACD,EACDT,EAAqC,KAAK,CACxC,IAAKC,EAAS,oBAAoB,UAChC,EACAA,EAAS,mBAAmB,OAAS,CACvC,EACA,aAAc,CACZ,CACE,OAAAO,EACA,MAAOE,CACT,CACF,CAAA,CACD,CACH,CAAA,CACD,EAEM,CACL,gCAAAX,EACA,qCAAAC,CAAA,CAEJ,EACCW,GAAS,CACYnB,EAAA,CAClB,cAAe,CACb,IAAKmB,EAAK,gCAAgC,CAAC,EAAE,IAC7C,aAAcA,EAAK,gCAAgC,QAChDC,GAAoBA,EAAgB,YACvC,CACF,EACA,mBAAoB,CAClB,IAAKD,EAAK,qCAAqC,CAAC,EAAE,IAClD,aAAcA,EAAK,qCAAqC,QACrDC,GAAoBA,EAAgB,YACvC,CACF,CAAA,CACD,CACH,EACA,CAAC3C,CAAe,CAAA,EAGlB,MAAM4C,EAAmB,SAAY,CACnC,MAAMC,EAAkB,MACtB/D,EACAyD,EACAxD,IACG,CACC,GAAA,CACF,MAAMK,EAAY,OAAO,gBACvB,CACE,MAAOI,EACP,eAAgB+C,EAChB,IAAAzD,CACF,EACAC,CAAA,QAEKsD,EAAO,CACN,QAAA,MACN,uCAAuCE,CAAM,KAAKF,CAAK,EAAA,CAE3D,CAAA,EAGE,GAAA,CACF,GACEf,EAAiB,eACjBA,EAAiB,cAAc,aAAa,OAAS,EAE1C,UAAAwB,KAAexB,EAAiB,cAAc,aACjD,MAAAuB,EACJvB,EAAiB,cAAc,IAC/BwB,EAAY,OACZA,EAAY,KAAA,EAKlB,GACExB,EAAiB,oBACjBA,EAAiB,mBAAmB,aAAa,OAAS,EAE/C,UAAAwB,KAAexB,EAAiB,mBACxC,aACK,MAAAuB,EACJvB,EAAiB,mBAAmB,IACpCwB,EAAY,OACZA,EAAY,KAAA,QAIXT,EAAO,CACN,QAAA,MAAM,wCAAwCA,CAAK,EAAE,CAC/D,CAAA,EAGIU,EAAsC,MAAOC,GAAW,CAC5D,GAAI,CAACrD,EACH,OAGF,MAAMsD,EAAS,CAAC,GAAItD,EAAO,QAAU,CAAG,CAAA,EAClCuD,EAAW1B,EAAgByB,EAAO,QAAQzB,CAAa,EAAI,GAC3D2B,EAAiC,CACrC,GAAGH,EACH,YAAahE,GAAqBgE,EAAO,WAAW,CAAA,EAStD,GANIE,IAAa,GACfD,EAAO,KAAKE,CAAY,EAExBF,EAAOC,CAAQ,EAAIC,EAGjB1D,GAAO,4BAA6B,CAChC,MAAA2D,EACJ9B,EAAiB,cAAc,aAAa,KACzCwB,GAAgBA,EAAY,MAAM,KAAW,IAAA,EAAA,EAG5CO,EACJ/B,EAAiB,mBAAmB,aAAa,KAC9CwB,GAAgBA,EAAY,MAAM,KAAW,IAAA,EAAA,EAIhD,GAAA,CAACM,GACD,CAACC,EACD,CACS/C,EAAA,uBAAwBhB,EAAE,kBAAkB,CAAC,EACtD,MACF,CACF,CAEgB,MAAMM,EAAK,CAAE,GAAGD,EAAQ,OAAAsD,EAAQ,IAG9C,MAAML,EAAiB,EACvB9C,EAASwD,EAAc,CAAE,MAAO9D,EAAW,IAAK,kBAAoB,CAAA,CAAC,EACvE,EAGI+D,EAA6BC,EAAS,CAC1C,QAASpD,EAAK,QACd,KAAM,eAAA,CACP,EAEKqD,EAAoCD,EAAS,CACjD,QAASpD,EAAK,QACd,KAAM,oBAAA,CACP,EAEKsD,GAAkC,CACtCC,EACA5E,IACG,CACH,MAAM6E,EACJ7E,IAAU,IAAMU,GAAO,4BACnB,8BAAkCV,CAAK,IACvC,GACA8E,EACJ9E,IAAU,IAAMU,GAAO,4BACnB,0CAA8CV,CAAK,IACnD,GACN2B,EAA0B3B,CAAK,EAC/B8B,EAAuC+C,CAAc,EACrD7C,EAA8C8C,CAAqB,CAAA,EAG/DC,EAAqC3C,EAAa,KACtDoC,GAA8BE,CAAA,EAG1BM,GACJR,GAA4B,UAC1B,EACAA,EAA2B,OAAS,CAAA,EAElCS,GACJP,GAAmC,UACjC,EACAA,EAAkC,OAAS,CAAA,EAGzCQ,GAAiCC,GAAqC,CAC1E3C,EAAqB4C,IAAU,CAC7B,GAAGA,EACH,cAAeD,CACf,EAAA,CAAA,EAGEE,GACJC,GACG,CACH9C,EAAqB4C,IAAU,CAC7B,GAAGA,EACH,mBAAoBE,CACpB,EAAA,CAAA,EAGEC,GAAqB,IAAM,CACnBrD,GAAA,EAGRsD,GACJnD,IAAS,gBACL2C,GACA,2BAA2BtD,CAAsB,GACjD+D,GACJpD,IAAS,qBACL4C,GACA,uCAAuCvD,CAAsB,GAEnE,OAEKgE,EAAAC,GAAA,CAAA,SAAA,CACC1D,GAAA2D,EAACC,GAAA,CACC,eACExD,IAAS,gBACLmD,GACAC,GAEN,KACEpD,IAAS,gBAAkB,gBAAkB,qBAE/C,aACEA,IAAS,gBACLE,EAAiB,cACjBA,EAAiB,mBAEvB,oBACEF,IAAS,gBACL6C,GACAG,GAEN,aAAcE,GACd,SAAU,IAAM,CACFrD,GACd,CAAA,CACF,EAEF0D,EAACE,GAAA,CACC,SAAUrD,EAAgB,gBAAkB,kBAC5C,QAAO,EAAA,CACT,IACCsD,GAAY,CAAA,QAAQ,QAAQ,SAAU1E,EAAK,aAAa2C,CAAQ,EAC/D,SAAC4B,EAAAI,GAAA,CAAW,aAAY,GAAC,KAAK,eAC5B,SAACN,EAAAO,GAAA,CAAc,GAAG5E,EAChB,SAAA,CAAAuE,EAACM,GAAA,CACC,KAAK,OACL,MAAO3F,EAAE,WAAW,EACpB,UAAWA,EAAE,cAAc,EAC3B,WAAY,CAAC,CAACkC,GAAiBhB,EAC/B,MAAO,CACL,SAAU,CACR,MAAO,GACP,QAASlB,EAAE,UAAU,CACvB,EACA,SAAWqE,GAAU,CACaD,GAAAC,EAAOA,EAAM,OAAO,KAAK,CAC3D,CACF,CAAA,CACF,EACC,CAAC,CAACnC,GACAmD,EAAA,QAAA,CAAM,KAAK,SAAU,GAAGvE,EAAK,SAAS,MAAM,CAAG,CAAA,EAElDuE,EAACO,EAAA,CACC,MAAO5F,EAAE,oBAAoB,EAC7B,UACEqF,EAACQ,EAAA,CACC,SAAU7F,EAAE,uBAAuB,EACnC,aAAa,oBAAA,CACf,EAEF,QAAQ,qCAER,SAAAmF,EAACW,EAAK,CAAA,UAAS,GACb,SAAA,CAAAX,EAACY,EAAS,CAAA,KAAM5F,GAAO,4BAA8B,GAAK,GACxD,SAAA,CAAAkF,EAACW,EAAA,CACC,GAAG,qCACH,cAAY,kCACZ,WACG7F,GAAO,6BACNgB,IAA2B,IAC5BD,GAAYsD,EAEf,MACEtD,EACI+C,EACA9D,GAAO,4BACLmB,EACA,OAEP,GAAGR,EAAK,SAAS,eAAe,CAAA,CACnC,EACCQ,GACC+D,EAACY,EAAA,CACC,UAAU,gBACV,QAAQ,OACR,SAAQ,GACR,QAAO,GACP,MAAOjG,EAAE,mCAAmC,CAAA,CAC9C,CAAA,EAEJ,EACCG,GAAO,6BACLkF,EAAAU,EAAA,CAAS,KAAM,EACd,SAAAV,EAACa,EAAA,CACC,QAAQ,OACR,UAAU,aACV,cAAY,wCACZ,aAAYlG,EAAE,oCAAoC,EAClD,WAAY,CAACmB,GAA0B,CAACD,EACxC,QAAS,IAAM,CACba,EAAQ,eAAe,EACXJ,GACd,EACA,OAAOwE,EAAe,EAAA,CAAA,CAAA,EAE1B,CAAA,EAEJ,CAAA,CACF,EACAd,EAACO,EAAA,CACC,MAAO5F,EAAE,yBAAyB,EAClC,UACEqF,EAACQ,EAAA,CACC,SAAU7F,EAAE,4BAA4B,EACxC,aAAa,yBAAA,CACf,EAEF,QAAQ,0CAER,SAAAmF,EAACW,EAAK,CAAA,UAAS,GACb,SAAA,CAAAX,EAACY,EAAS,CAAA,KAAM5F,GAAO,4BAA8B,GAAK,GACxD,SAAA,CAAAkF,EAACW,EAAA,CACC,GAAG,0CACH,cAAY,uCACZ,WACG7F,GAAO,6BACNgB,IAA2B,IAC5BD,GAAYsD,EAEf,MACEtD,EACIiD,EACAhE,GAAO,4BACLqB,EACA,OAEP,GAAGV,EAAK,SAAS,oBAAoB,CAAA,CACxC,EACCU,GACC6D,EAACY,EAAA,CACC,UAAU,gBACV,QAAQ,OACR,SAAQ,GACR,QAAO,GACP,MAAOjG,EAAE,mCAAmC,CAAA,CAC9C,CAAA,EAEJ,EACCG,GAAO,6BACLkF,EAAAU,EAAA,CAAS,KAAM,EACd,SAAAV,EAACa,EAAA,CACC,QAAQ,OACR,UAAU,aACV,cAAY,+CACZ,aAAYlG,EACV,2CACF,EACA,WAAY,CAACmB,GAA0B,CAACD,EACxC,QAAS,IAAM,CACba,EAAQ,oBAAoB,EAChBJ,GACd,EACA,OAAOwE,EAAe,EAAA,CAAA,CAAA,EAE1B,CAAA,EAEJ,CAAA,CACF,EACAd,EAACe,IACC,SAACf,EAAAgB,GAAA,CAAK,UAAU,KAAM,SAAArG,EAAE,iBAAiB,CAAA,CAAE,CAC7C,CAAA,IACC4F,EAAU,CAAA,MAAO5F,EAAE,iBAAiB,EAAG,QAAQ,iBAC9C,SAACqF,EAAAiB,GAAA,CAAc,MAAOtG,EAAE,iBAAiB,EAAG,KAAK,aAAc,CAAA,EACjE,IACCuG,GACC,CAAA,SAAA,CAAAlB,EAACa,EAAA,CACC,QAAQ,UACR,KAAK,SACL,cAAY,eAEX,WAAE,MAAM,CAAA,CACX,EACAb,EAACa,EAAA,CACC,QAAQ,OACR,UAAYM,GACVnB,EAACoB,GAAA,CACE,GAAGD,EACJ,GAAIxC,EAAc,CAChB,MAAO9D,EACP,IAAK,kBAAA,CACN,CAAA,CACH,EAGD,WAAE,QAAQ,CAAA,CACb,CAAA,EACF,CAAA,CACF,CAAA,CACF,CAAA,EACF,CACF,CAAA,CAAA,CAEJ,CC/mBA,MAAMwG,GAAyB,IAC7BrB,EAACsB,GACC,CAAA,SAAAtB,EAACxF,KAAoB,CACvB,CAAA"}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy