@keycloak/keycloak-ui-shared 26.5.7 → 26.6.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keycloak-ui-shared.js","sources":["../src/utils/createNamedContext.ts","../src/utils/errors.ts","../src/utils/generateId.ts","../src/utils/isDefined.ts","../src/utils/useRequiredContext.ts","../src/utils/useSetTimeout.ts","../src/alerts/AlertPanel.tsx","../src/alerts/Alerts.tsx","../src/context/ErrorPage.tsx","../src/utils/useStorageItem.ts","../src/utils/useStoredState.ts","../src/context/HelpContext.tsx","../src/context/KeycloakContext.tsx","../src/context/environment.ts","../src/continue-cancel/ContinueCancelModal.tsx","../src/controls/FormErrorText.tsx","../src/controls/HelpItem.tsx","../src/utils/getRuleValue.ts","../src/controls/FormLabel.tsx","../src/controls/NumberControl.tsx","../src/controls/PasswordInput.tsx","../src/controls/PasswordControl.tsx","../src/controls/select-control/SingleSelectControl.tsx","../src/controls/select-control/TypeaheadSelectControl.tsx","../src/controls/select-control/SelectControl.tsx","../src/user-profile/utils.ts","../src/controls/SwitchControl.tsx","../src/controls/TextAreaControl.tsx","../src/controls/TextControl.tsx","../src/controls/keycloak-text-area/KeycloakTextArea.tsx","../src/controls/FileUploadControl.tsx","../src/icons/IconMapper.tsx","../src/scroll-form/FormTitle.tsx","../src/scroll-form/FormPanel.tsx","../src/scroll-form/ScrollPanel.tsx","../src/scroll-form/ScrollForm.tsx","../src/buttons/FormSubmitButton.tsx","../src/user-profile/LocaleSelector.tsx","../src/user-profile/UserProfileGroup.tsx","../src/user-profile/MultiInputComponent.tsx","../src/user-profile/OptionsComponent.tsx","../src/select/SingleSelect.tsx","../src/select/TypeaheadSelect.tsx","../src/select/KeycloakSelect.tsx","../src/user-profile/SelectComponent.tsx","../src/user-profile/TextAreaComponent.tsx","../src/user-profile/TextComponent.tsx","../src/user-profile/UserProfileFields.tsx","../src/masthead/DefaultAvatar.tsx","../src/masthead/KeycloakDropdown.tsx","../src/masthead/Masthead.tsx","../src/utils/ErrorBoundary.tsx","../src/utils/useFetch.ts","../src/controls/KeycloakSpinner.tsx","../src/controls/table/ListEmptyState.tsx","../src/controls/table/TableToolbar.tsx","../src/controls/table/PaginatingTableToolbar.tsx","../src/controls/table/KeycloakDataTable.tsx","../src/controls/OrganizationTable.tsx"],"sourcesContent":["import type { Context } from \"react\";\nimport { createContext } from \"react\";\n\nexport type NamedContext<T> = Context<T> &\n Required<Pick<Context<T>, \"displayName\">>;\n\nexport function createNamedContext<T>(displayName: string, defaultValue: T) {\n const context = createContext(defaultValue);\n context.displayName = displayName;\n return context as NamedContext<T>;\n}\n","import { NetworkError } from \"@keycloak/keycloak-admin-client\";\n\nconst ERROR_FIELDS = [\"error\", \"errorMessage\"];\nconst ERROR_DESCRIPTION_FIELD = \"error_description\";\n\nexport function getErrorMessage(error: unknown) {\n if (typeof error === \"string\") {\n return error;\n }\n\n if (error instanceof NetworkError) {\n return getNetworkErrorMessage(error.responseData);\n }\n\n if (error instanceof Error) {\n return error.message;\n }\n\n throw new Error(\"Unable to determine error message.\");\n}\n\nexport function getErrorDescription(error: unknown) {\n if (!(error instanceof NetworkError)) {\n return;\n }\n\n const data = error.responseData;\n\n return getNetworkErrorDescription(data);\n}\n\nexport function getNetworkErrorDescription(data: unknown) {\n if (\n typeof data === \"object\" &&\n data !== null &&\n ERROR_DESCRIPTION_FIELD in data &&\n typeof data[ERROR_DESCRIPTION_FIELD] === \"string\"\n ) {\n return data[ERROR_DESCRIPTION_FIELD];\n }\n}\n\nexport function getNetworkErrorMessage(data: unknown) {\n if (typeof data !== \"object\" || data === null) {\n return;\n }\n\n for (const key of ERROR_FIELDS) {\n const value = (data as Record<string, unknown>)[key];\n\n if (typeof value === \"string\") {\n return value;\n }\n }\n}\n","export const generateId = () => Math.floor(Math.random() * 1000);\n","export function isDefined<T>(value: T): value is NonNullable<T> {\n return value !== undefined && value !== null;\n}\n","import type { Context } from \"react\";\nimport { useContext } from \"react\";\nimport { isDefined } from \"./isDefined\";\n\n/**\n * Passes the call to `useContext` and throw an exception if the resolved value is either `null` or `undefined`.\n * Can be used for contexts that are required and should always have a non nullable value.\n *\n * @param context The context to pass to `useContext`\n * @returns\n */\nexport function useRequiredContext<T>(context: Context<T>): NonNullable<T> {\n const resolved = useContext(context);\n\n if (isDefined(resolved)) {\n return resolved;\n }\n\n throw new Error(\n `No provider found for ${\n context.displayName ? `the '${context.displayName}'` : \"an unknown\"\n } context, make sure it is included in your component hierarchy.`,\n );\n}\n","import { useEffect, useRef, useCallback } from \"react\";\n\nexport function useSetTimeout() {\n const didUnmountRef = useRef(false);\n const scheduledTimersRef = useRef(new Set<number>());\n\n useEffect(() => {\n didUnmountRef.current = false;\n\n return () => {\n didUnmountRef.current = true;\n clearAll();\n };\n }, []);\n\n function clearAll() {\n scheduledTimersRef.current.forEach((timer) => clearTimeout(timer));\n scheduledTimersRef.current.clear();\n }\n\n return useCallback((callback: () => void, delay: number) => {\n if (didUnmountRef.current) {\n throw new Error(\"Can't schedule a timeout on an unmounted component.\");\n }\n\n const timer = Number(setTimeout(handleCallback, delay));\n\n scheduledTimersRef.current.add(timer);\n\n function handleCallback() {\n scheduledTimersRef.current.delete(timer);\n callback();\n }\n\n return function cancelTimeout() {\n clearTimeout(timer);\n scheduledTimersRef.current.delete(timer);\n };\n }, []);\n}\n","import {\n AlertGroup,\n Alert,\n AlertActionCloseButton,\n AlertVariant,\n} from \"@patternfly/react-core\";\n\nimport type { AlertEntry } from \"./Alerts\";\n\nexport type AlertPanelProps = {\n alerts: AlertEntry[];\n onCloseAlert: (id: number) => void;\n};\n\nexport function AlertPanel({ alerts, onCloseAlert }: AlertPanelProps) {\n return (\n <AlertGroup\n data-testid=\"global-alerts\"\n isToast\n style={{ whiteSpace: \"pre-wrap\" }}\n >\n {alerts.map(({ id, variant, message, description }, index) => (\n <Alert\n key={id}\n data-testid={index === 0 ? \"last-alert\" : undefined}\n isLiveRegion\n variant={AlertVariant[variant]}\n component=\"p\"\n variantLabel=\"\"\n title={message}\n actionClose={\n <AlertActionCloseButton\n title={message}\n onClose={() => onCloseAlert(id)}\n />\n }\n >\n {description && <p>{description}</p>}\n </Alert>\n ))}\n </AlertGroup>\n );\n}\n","import { AlertVariant } from \"@patternfly/react-core\";\nimport { PropsWithChildren, useCallback, useMemo, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { createNamedContext } from \"../utils/createNamedContext\";\nimport { getErrorDescription, getErrorMessage } from \"../utils/errors\";\nimport { generateId } from \"../utils/generateId\";\nimport { useRequiredContext } from \"../utils/useRequiredContext\";\nimport { useSetTimeout } from \"../utils/useSetTimeout\";\nimport { AlertPanel } from \"./AlertPanel\";\n\nconst ALERT_TIMEOUT = 8000;\n\nexport type AddAlertFunction = (\n message: string,\n variant?: AlertVariant,\n description?: string,\n) => void;\n\nexport type AddErrorFunction = (messageKey: string, error: unknown) => void;\n\nexport type AlertProps = {\n addAlert: AddAlertFunction;\n addError: AddErrorFunction;\n};\n\nconst AlertContext = createNamedContext<AlertProps | undefined>(\n \"AlertContext\",\n undefined,\n);\n\nexport const useAlerts = () => useRequiredContext(AlertContext);\n\nexport type AlertEntry = {\n id: number;\n message: string;\n variant: AlertVariant;\n description?: string;\n};\n\nexport const AlertProvider = ({ children }: PropsWithChildren) => {\n const { t } = useTranslation();\n const setTimeout = useSetTimeout();\n const [alerts, setAlerts] = useState<AlertEntry[]>([]);\n\n const removeAlert = (id: number) =>\n setAlerts((alerts) => alerts.filter((alert) => alert.id !== id));\n\n const addAlert = useCallback<AddAlertFunction>(\n (message, variant = AlertVariant.success, description) => {\n const alert: AlertEntry = {\n id: generateId(),\n message,\n variant,\n description,\n };\n\n setAlerts((alerts) => [alert, ...alerts]);\n setTimeout(() => removeAlert(alert.id), ALERT_TIMEOUT);\n },\n [setTimeout],\n );\n\n const addError = useCallback<AddErrorFunction>(\n (messageKey, error) => {\n const message = t(messageKey, { error: getErrorMessage(error) });\n const description = getErrorDescription(error);\n\n addAlert(message, AlertVariant.danger, description);\n },\n [addAlert, t],\n );\n\n const value = useMemo(() => ({ addAlert, addError }), [addAlert, addError]);\n\n return (\n <AlertContext.Provider value={value}>\n <AlertPanel alerts={alerts} onCloseAlert={removeAlert} />\n {children}\n </AlertContext.Provider>\n );\n};\n","import {\n Button,\n Modal,\n ModalVariant,\n Page,\n Text,\n TextContent,\n} from \"@patternfly/react-core\";\nimport { useTranslation } from \"react-i18next\";\nimport { getNetworkErrorMessage } from \"../utils/errors\";\n\ntype ErrorPageProps = {\n error?: unknown;\n};\n\nexport const ErrorPage = (props: ErrorPageProps) => {\n const { t, i18n } = useTranslation();\n const error = props.error;\n const errorMessage = getErrorMessage(error);\n const networkErrorMessage = getNetworkErrorMessage(error);\n console.error(error);\n\n function onRetry() {\n location.href = location.origin + location.pathname;\n }\n\n return (\n <Page>\n <Modal\n variant={ModalVariant.small}\n title={t(\"somethingWentWrong\")}\n titleIconVariant=\"danger\"\n showClose={false}\n isOpen\n actions={[\n <Button key=\"tryAgain\" variant=\"primary\" onClick={onRetry}>\n {t(\"tryAgain\")}\n </Button>,\n ]}\n >\n <TextContent>\n {errorMessage ? (\n <Text>{t(errorMessage)}</Text>\n ) : networkErrorMessage && i18n.exists(networkErrorMessage) ? (\n <Text>{t(networkErrorMessage)}</Text>\n ) : (\n <Text>{t(\"somethingWentWrongDescription\")}</Text>\n )}\n </TextContent>\n </Modal>\n </Page>\n );\n};\n\nfunction getErrorMessage(error: unknown): string | null {\n if (error instanceof Error) {\n return error.message;\n }\n\n return null;\n}\n","import { Dispatch, useCallback, useEffect, useState } from \"react\";\n\n/**\n * A hook that allows you to get a specific item stored by the [Web Storage API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API).\n * Automatically updates the value when modified in the context of another document (such as an open tab) trough the [`storage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/storage_event) event.\n *\n * @param storageArea The storage area to target, must implement the [`Storage`](https://developer.mozilla.org/en-US/docs/Web/API/Storage) interface (such as [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) and [`sessionStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage)).\n * @param keyName The key of the item to get from storage, same as passed to [`Storage.getItem()`](https://developer.mozilla.org/en-US/docs/Web/API/Storage/getItem)\n * @param The default value to fall back to in case no stored value was retrieved.\n */\nexport function useStorageItem(\n storageArea: Storage,\n keyName: string,\n defaultValue: string,\n): [string, Dispatch<string>] {\n const [value, setInnerValue] = useState(\n () => storageArea.getItem(keyName) ?? defaultValue,\n );\n\n const setValue = useCallback((newValue: string) => {\n setInnerValue(newValue);\n storageArea.setItem(keyName, newValue);\n }, []);\n\n useEffect(() => {\n // If the key name or storage area has changed, we want to update the value.\n // React will only set state if it actually changed, so no need to worry about re-renders.\n setInnerValue(storageArea.getItem(keyName) ?? defaultValue);\n\n // Subscribe to storage events so we can update the value when it is changed within the context of another document.\n window.addEventListener(\"storage\", handleStorage);\n\n function handleStorage(event: StorageEvent) {\n // If the affected storage area is different we can ignore this event.\n // For example, if we're using session storage we're not interested in changes from local storage.\n if (event.storageArea !== storageArea) {\n return;\n }\n\n // If the event key is null then it means all storage was cleared.\n // Therefore we're interested in keys that are, or that match the key name.\n if (event.key === null || event.key === keyName) {\n setInnerValue(event.newValue ?? defaultValue);\n }\n }\n\n return () => window.removeEventListener(\"storage\", handleStorage);\n }, [storageArea, keyName]);\n\n return [value, setValue];\n}\n","import { Dispatch, useCallback, useMemo } from \"react\";\nimport { useStorageItem } from \"./useStorageItem\";\n\n/**\n * A hook that acts similarly to React's `useState()`, but persists the state using [Web Storage API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API).\n * Automatically updates the value when modified in the context of another document (such as an open tab) trough the [`storage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/storage_event) event.\n *\n * The value is serialized as [JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) and therefore the value provided must be serializable as such.\n * Because the value is always serialized it will never be referentially equal to originally provided value.\n *\n * @param storageArea The storage area to target, must implement the [`Storage`](https://developer.mozilla.org/en-US/docs/Web/API/Storage) interface (such as [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) and [`sessionStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage)).\n * @param keyName The key of the item to get from storage, same as passed to [`Storage.getItem()`](https://developer.mozilla.org/en-US/docs/Web/API/Storage/getItem)\n * @param defaultValue The default value to fall back to in case no stored value was retrieved (must be serializable as JSON).\n */\nexport function useStoredState<S>(\n storageArea: Storage,\n keyName: string,\n defaultValue: S,\n): [S, Dispatch<S>] {\n const defaultValueSerialized = useMemo(\n () => JSON.stringify(defaultValue),\n [defaultValue],\n );\n\n const [storedValue, setStoredValue] = useStorageItem(\n storageArea,\n keyName,\n defaultValueSerialized,\n );\n\n const value = useMemo<S>(() => JSON.parse(storedValue), [storedValue]);\n const setValue = useCallback(\n (value: S) => setStoredValue(JSON.stringify(value)),\n [],\n );\n\n return [value, setValue];\n}\n","import { PropsWithChildren } from \"react\";\nimport { createNamedContext } from \"../utils/createNamedContext\";\nimport { useRequiredContext } from \"../utils/useRequiredContext\";\nimport { useStoredState } from \"../utils/useStoredState\";\n\ntype HelpContextProps = {\n enabled: boolean;\n toggleHelp: () => void;\n};\n\nexport const HelpContext = createNamedContext<HelpContextProps | undefined>(\n \"HelpContext\",\n undefined,\n);\n\nexport const useHelp = () => useRequiredContext(HelpContext);\n\nexport const Help = ({ children }: PropsWithChildren) => {\n const [enabled, setHelp] = useStoredState(localStorage, \"helpEnabled\", true);\n\n function toggleHelp() {\n setHelp(!enabled);\n }\n\n return (\n <HelpContext.Provider value={{ enabled, toggleHelp }}>\n {children}\n </HelpContext.Provider>\n );\n};\n","import { Spinner } from \"@patternfly/react-core\";\nimport Keycloak from \"keycloak-js\";\nimport {\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AlertProvider } from \"../alerts/Alerts\";\nimport { ErrorPage } from \"./ErrorPage\";\nimport { Help } from \"./HelpContext\";\nimport { BaseEnvironment } from \"./environment\";\n\nexport type KeycloakContext<T extends BaseEnvironment = BaseEnvironment> =\n KeycloakContextProps<T> & {\n keycloak: Keycloak;\n };\n\nconst createKeycloakEnvContext = <T extends BaseEnvironment>() =>\n createContext<KeycloakContext<T> | undefined>(undefined);\n\nlet KeycloakEnvContext: any;\n\nexport const useEnvironment = <\n T extends BaseEnvironment = BaseEnvironment,\n>() => {\n const context = useContext<KeycloakContext<T>>(KeycloakEnvContext);\n if (!context)\n throw Error(\n \"no environment provider in the hierarchy make sure to add the provider\",\n );\n return context;\n};\n\ninterface KeycloakContextProps<T extends BaseEnvironment> {\n environment: T;\n keycloak?: Keycloak;\n}\n\nexport const KeycloakProvider = <T extends BaseEnvironment>({\n environment,\n keycloak: externalKeycloak,\n children,\n}: PropsWithChildren<KeycloakContextProps<T>>) => {\n KeycloakEnvContext = createKeycloakEnvContext<T>();\n const calledOnce = useRef(false);\n const [init, setInit] = useState(!!externalKeycloak);\n const [error, setError] = useState<unknown>();\n const keycloak = useMemo(() => {\n if (externalKeycloak) {\n return externalKeycloak;\n }\n const keycloak = new Keycloak({\n url: environment.serverBaseUrl,\n realm: environment.realm,\n clientId: environment.clientId,\n });\n\n keycloak.onAuthLogout = () => keycloak.login();\n\n return keycloak;\n }, [environment, externalKeycloak]);\n\n useEffect(() => {\n // Skip initialization if using external keycloak (already initialized)\n if (externalKeycloak) {\n return;\n }\n\n // only needed in dev mode\n if (calledOnce.current) {\n return;\n }\n\n const init = () =>\n keycloak.init({\n onLoad: \"login-required\",\n pkceMethod: \"S256\",\n responseMode: \"query\",\n scope: environment.scope,\n });\n\n init()\n .then(() => setInit(true))\n .catch((error) => setError(error));\n\n calledOnce.current = true;\n }, [keycloak, externalKeycloak]);\n\n if (error) {\n return <ErrorPage error={error} />;\n }\n\n if (!init) {\n return <Spinner />;\n }\n\n return (\n <KeycloakEnvContext.Provider value={{ environment, keycloak }}>\n <AlertProvider>\n <Help>{children}</Help>\n </AlertProvider>\n </KeycloakEnvContext.Provider>\n );\n};\n","/** The base environment variables that are shared between the Admin and Account Consoles. */\nexport type BaseEnvironment = {\n /**\n * The URL to the root of the Keycloak server, including the path if present, this is **NOT** always equivalent to the URL of the Admin Console.\n * For example, the Keycloak server could be hosted on `auth.example.com` and Admin Console may be hosted on `admin.example.com/some/path`.\n *\n * Note that this URL is normalized not to include a trailing slash, so take this into account when constructing URLs.\n *\n * @see {@link https://www.keycloak.org/server/hostname#_administration_console}\n */\n serverBaseUrl: string;\n /** The identifier of the realm used to authenticate the user. */\n realm: string;\n /** The identifier of the client used to authenticate the user. */\n clientId: string;\n /** The base URL of the resources. */\n resourceUrl: string;\n /** The source URL for the logo image. */\n logo: string;\n /** The URL to be followed when the logo is clicked. */\n logoUrl: string;\n /** The scopes to be requested when sending authorization requests*/\n scope?: string;\n};\n\n/**\n * Extracts the environment variables from the document, these variables are injected by Keycloak as a script tag, the contents of which can be parsed as JSON. For example:\n *\n *```html\n * <script id=\"environment\" type=\"application/json\">\n * {\n * \"realm\": \"master\",\n * \"clientId\": \"security-admin-console\",\n * \"etc\": \"...\"\n * }\n * </script>\n * ```\n */\nexport function getInjectedEnvironment<T>(): T {\n const element = document.getElementById(\"environment\");\n const contents = element?.textContent;\n\n if (typeof contents !== \"string\") {\n throw new Error(\"Environment variables not found in the document.\");\n }\n\n try {\n return JSON.parse(contents);\n } catch {\n throw new Error(\"Unable to parse environment variables as JSON.\");\n }\n}\n","import { ReactNode, useState } from \"react\";\nimport { Button, ButtonProps, Modal, ModalProps } from \"@patternfly/react-core\";\n\nexport type ContinueCancelModalProps = Omit<ModalProps, \"ref\" | \"children\"> & {\n modalTitle: string;\n continueLabel: string;\n cancelLabel: string;\n buttonTitle: string | ReactNode;\n buttonVariant?: ButtonProps[\"variant\"];\n buttonTestRole?: string;\n isDisabled?: boolean;\n onContinue: () => void;\n component?: React.ElementType<any> | React.ComponentType<any>;\n children?: ReactNode;\n};\n\nexport const ContinueCancelModal = ({\n modalTitle,\n continueLabel,\n cancelLabel,\n buttonTitle,\n isDisabled,\n buttonVariant,\n buttonTestRole,\n onContinue,\n component = Button,\n children,\n ...rest\n}: ContinueCancelModalProps) => {\n const [open, setOpen] = useState(false);\n const Component = component;\n\n return (\n <>\n <Component\n variant={buttonVariant}\n onClick={() => setOpen(true)}\n isDisabled={isDisabled}\n data-testrole={buttonTestRole}\n >\n {buttonTitle}\n </Component>\n <Modal\n variant=\"small\"\n {...rest}\n title={modalTitle}\n isOpen={open}\n onClose={() => setOpen(false)}\n actions={[\n <Button\n id=\"modal-confirm\"\n key=\"confirm\"\n variant=\"primary\"\n onClick={() => {\n setOpen(false);\n onContinue();\n }}\n >\n {continueLabel}\n </Button>,\n <Button\n id=\"modal-cancel\"\n key=\"cancel\"\n variant=\"secondary\"\n onClick={() => setOpen(false)}\n >\n {cancelLabel}\n </Button>,\n ]}\n >\n {children}\n </Modal>\n </>\n );\n};\n","import {\n FormHelperText,\n FormHelperTextProps,\n HelperText,\n HelperTextItem,\n} from \"@patternfly/react-core\";\nimport { ExclamationCircleIcon } from \"@patternfly/react-icons\";\n\nexport type FormErrorTextProps = FormHelperTextProps & {\n message: string;\n};\n\nexport const FormErrorText = ({ message, ...props }: FormErrorTextProps) => {\n return (\n <FormHelperText {...props}>\n <HelperText>\n <HelperTextItem icon={<ExclamationCircleIcon />} variant=\"error\">\n {message}\n </HelperTextItem>\n </HelperText>\n </FormHelperText>\n );\n};\n","import { Icon, Popover } from \"@patternfly/react-core\";\nimport { HelpIcon, ExclamationTriangleIcon } from \"@patternfly/react-icons\";\nimport { ReactNode } from \"react\";\nimport { useHelp } from \"../context/HelpContext\";\n\ntype HelpItemProps = {\n helpText: string | ReactNode;\n fieldLabelId: string;\n noVerticalAlign?: boolean;\n unWrap?: boolean;\n isRecommendation?: boolean;\n};\n\nexport const HelpItem = ({\n helpText,\n fieldLabelId,\n noVerticalAlign = true,\n unWrap = false,\n isRecommendation = false,\n}: HelpItemProps) => {\n const { enabled } = useHelp();\n const IconComponent = isRecommendation ? ExclamationTriangleIcon : HelpIcon;\n\n return enabled ? (\n <Popover bodyContent={helpText}>\n <>\n {!unWrap && (\n <button\n data-testid={`help-label-${fieldLabelId}`}\n aria-label={fieldLabelId}\n onClick={(e) => e.preventDefault()}\n className=\"pf-v5-c-form__group-label-help\"\n >\n <Icon\n isInline={noVerticalAlign}\n status={isRecommendation ? \"warning\" : undefined}\n >\n <IconComponent />\n </Icon>\n </button>\n )}\n {unWrap && (\n <Icon\n isInline={noVerticalAlign}\n status={isRecommendation ? \"warning\" : undefined}\n >\n <IconComponent />\n </Icon>\n )}\n </>\n </Popover>\n ) : null;\n};\n","import type { ValidationRule, ValidationValue } from \"react-hook-form\";\n\n// Simplified version of https://github.com/react-hook-form/react-hook-form/blob/ea0f3ed86457691f79987a703ae8d50b9e16e2ad/src/logic/getRuleValue.ts#L10-L21\n// TODO: Can be removed if https://github.com/react-hook-form/react-hook-form/issues/12178 is resolved\nexport function getRuleValue<T extends ValidationValue>(\n rule?: ValidationRule<T>,\n): T | undefined {\n if (typeof rule === \"undefined\" || rule instanceof RegExp) {\n return;\n }\n\n if (typeof rule === \"object\") {\n return rule.value;\n }\n\n return rule;\n}\n","import { FormGroup, FormGroupProps } from \"@patternfly/react-core\";\nimport { PropsWithChildren, ReactNode } from \"react\";\nimport { FieldError, FieldValues, Merge } from \"react-hook-form\";\nimport { FormErrorText } from \"./FormErrorText\";\nimport { HelpItem } from \"./HelpItem\";\n\nexport type FieldProps<T extends FieldValues = FieldValues> = {\n id?: string | undefined;\n label?: string;\n name: string;\n labelIcon?: string | ReactNode;\n error?: FieldError | Merge<FieldError, T>;\n isRequired: boolean;\n};\n\ntype FormLabelProps = FieldProps & Omit<FormGroupProps, \"label\" | \"labelIcon\">;\n\nexport const FormLabel = ({\n id,\n name,\n label,\n labelIcon,\n error,\n children,\n ...rest\n}: PropsWithChildren<FormLabelProps>) => (\n <FormGroup\n label={label || name}\n fieldId={id || name}\n labelIcon={\n labelIcon ? (\n <HelpItem helpText={labelIcon} fieldLabelId={id || name} />\n ) : undefined\n }\n {...rest}\n >\n {children}\n {error && (\n <FormErrorText data-testid={`${name}-helper`} message={error.message} />\n )}\n </FormGroup>\n);\n","import {\n NumberInput,\n NumberInputProps,\n ValidatedOptions,\n} from \"@patternfly/react-core\";\nimport {\n Controller,\n ControllerProps,\n FieldPath,\n FieldValues,\n UseControllerProps,\n useFormContext,\n} from \"react-hook-form\";\n\nimport { getRuleValue } from \"../utils/getRuleValue\";\nimport { FormLabel } from \"./FormLabel\";\n\nexport type NumberControlOption = {\n key: string;\n value: string;\n};\n\nexport type NumberControlProps<\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n> = Omit<NumberInputProps, \"name\" | \"isRequired\" | \"required\"> &\n UseControllerProps<T, P> & {\n name: string;\n label?: string;\n labelIcon?: string;\n controller: Omit<ControllerProps, \"name\" | \"render\">;\n };\n\nexport const NumberControl = <\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n>({\n name,\n label,\n controller,\n labelIcon,\n ...rest\n}: NumberControlProps<T, P>) => {\n const {\n control,\n formState: { errors },\n } = useFormContext();\n\n return (\n <FormLabel\n name={name}\n label={label}\n isRequired={controller.rules?.required === true}\n error={errors[name]}\n labelIcon={labelIcon}\n >\n <Controller\n {...controller}\n name={name}\n control={control}\n render={({ field }) => {\n const required = !!controller.rules?.required;\n const min = getRuleValue(controller.rules?.min);\n const value = field.value ?? controller.defaultValue;\n const setValue = (newValue: number) =>\n field.onChange(\n min !== undefined ? Math.max(newValue, Number(min)) : newValue,\n );\n\n return (\n <NumberInput\n {...rest}\n id={name}\n value={value}\n validated={\n errors[name] ? ValidatedOptions.error : ValidatedOptions.default\n }\n required={required}\n min={Number(min)}\n max={Number(controller.rules?.max)}\n onPlus={() => setValue(value + 1)}\n onMinus={() => setValue(value - 1)}\n onChange={(event) => {\n const newValue = Number(event.currentTarget.value);\n setValue(!isNaN(newValue) ? newValue : controller.defaultValue);\n }}\n />\n );\n }}\n />\n </FormLabel>\n );\n};\n","import {\n Button,\n InputGroup,\n InputGroupItem,\n TextInput,\n type TextInputProps,\n} from \"@patternfly/react-core\";\nimport { EyeIcon, EyeSlashIcon } from \"@patternfly/react-icons\";\nimport { MutableRefObject, Ref, forwardRef, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nexport type PasswordInputProps = TextInputProps & {\n hasReveal?: boolean;\n};\n\nconst PasswordInputBase = ({\n hasReveal = true,\n innerRef,\n ...rest\n}: PasswordInputProps) => {\n const { t } = useTranslation();\n const [hidePassword, setHidePassword] = useState(true);\n return (\n <InputGroup>\n <InputGroupItem isFill>\n <TextInput\n {...rest}\n type={hidePassword ? \"password\" : \"text\"}\n ref={innerRef}\n />\n </InputGroupItem>\n {hasReveal && (\n <Button\n variant=\"control\"\n aria-label={t(\"showPassword\")}\n onClick={() => setHidePassword(!hidePassword)}\n >\n {hidePassword ? <EyeIcon /> : <EyeSlashIcon />}\n </Button>\n )}\n </InputGroup>\n );\n};\n\nexport const PasswordInput = forwardRef(\n (props: PasswordInputProps, ref: Ref<HTMLInputElement>) => (\n <PasswordInputBase {...props} innerRef={ref as MutableRefObject<any>} />\n ),\n);\nPasswordInput.displayName = \"PasswordInput\";\n","import {\n FormHelperText,\n HelperText,\n HelperTextItem,\n ValidatedOptions,\n} from \"@patternfly/react-core\";\nimport {\n FieldPath,\n FieldValues,\n PathValue,\n UseControllerProps,\n useController,\n} from \"react-hook-form\";\nimport { getRuleValue } from \"../utils/getRuleValue\";\nimport { FormLabel } from \"./FormLabel\";\nimport { PasswordInput, PasswordInputProps } from \"./PasswordInput\";\n\nexport type PasswordControlProps<\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n> = UseControllerProps<T, P> &\n Omit<PasswordInputProps, \"name\" | \"isRequired\" | \"required\"> & {\n label: string;\n labelIcon?: string;\n isDisabled?: boolean;\n helperText?: string;\n };\n\nexport const PasswordControl = <\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n>(\n props: PasswordControlProps<T, P>,\n) => {\n const { labelIcon, ...rest } = props;\n const required = !!getRuleValue(props.rules?.required);\n const defaultValue = props.defaultValue ?? (\"\" as PathValue<T, P>);\n\n const { field, fieldState } = useController({\n ...props,\n defaultValue,\n });\n\n return (\n <FormLabel\n name={props.name}\n label={props.label}\n labelIcon={labelIcon}\n isRequired={required}\n error={fieldState.error}\n >\n <PasswordInput\n isRequired={required}\n id={props.name}\n data-testid={props.name}\n validated={\n fieldState.error ? ValidatedOptions.error : ValidatedOptions.default\n }\n isDisabled={props.isDisabled}\n {...rest}\n {...field}\n />\n {props.helperText && (\n <FormHelperText>\n <HelperText>\n <HelperTextItem>{props.helperText}</HelperTextItem>\n </HelperText>\n </FormHelperText>\n )}\n </FormLabel>\n );\n};\n","import {\n MenuToggle,\n MenuToggleStatus,\n Select,\n SelectList,\n SelectOption,\n} from \"@patternfly/react-core\";\nimport { get } from \"lodash-es\";\nimport { useState } from \"react\";\nimport {\n Controller,\n FieldPath,\n FieldValues,\n useFormContext,\n} from \"react-hook-form\";\nimport { getRuleValue } from \"../../utils/getRuleValue\";\nimport { FormLabel } from \"../FormLabel\";\nimport {\n SelectControlProps,\n isSelectBasedOptions,\n isString,\n key,\n} from \"./SelectControl\";\n\nexport const SingleSelectControl = <\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n>({\n id,\n name,\n label,\n options,\n selectedOptions = [],\n controller,\n labelIcon,\n isDisabled,\n isFullWidth = true,\n onSelect,\n ...rest\n}: SelectControlProps<T, P>) => {\n const {\n control,\n formState: { errors },\n } = useFormContext();\n const [open, setOpen] = useState(false);\n const required = getRuleValue(controller.rules?.required) === true;\n\n return (\n <FormLabel\n id={id}\n name={name}\n label={label}\n isRequired={required}\n error={get(errors, name)}\n labelIcon={labelIcon}\n >\n <Controller\n {...controller}\n name={name}\n control={control}\n render={({ field: { onChange, value } }) => (\n <Select\n {...rest}\n variant=\"default\"\n onClick={() => setOpen(!open)}\n onOpenChange={() => setOpen(false)}\n selected={\n isSelectBasedOptions(options)\n ? options\n .filter((o) =>\n Array.isArray(value)\n ? value.includes(o.key)\n : value === o.key,\n )\n .map((o) => o.value)\n : value\n }\n toggle={(ref) => (\n <MenuToggle\n id={id || name}\n ref={ref}\n onClick={() => setOpen(!open)}\n isExpanded={open}\n isFullWidth={isFullWidth}\n status={get(errors, name) ? MenuToggleStatus.danger : undefined}\n aria-label={label}\n isDisabled={isDisabled}\n >\n {isSelectBasedOptions(options)\n ? options.find(\n (o) =>\n o.key === (Array.isArray(value) ? value[0] : value),\n )?.value\n : value}\n </MenuToggle>\n )}\n onSelect={(_event, v) => {\n const option = v?.toString()!;\n const convertedValue = Array.isArray(value) ? [option] : option;\n if (onSelect) {\n onSelect(convertedValue, onChange);\n } else {\n onChange(convertedValue);\n }\n setOpen(false);\n }}\n isOpen={open}\n >\n <SelectList data-testid={`select-${name}`}>\n {[...options, ...selectedOptions].map((option) => (\n <SelectOption\n key={key(option)}\n value={key(option)}\n description={\n !isString(option) && \"description\" in option\n ? option.description\n : undefined\n }\n >\n {isString(option) ? option : option.value}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n )}\n />\n </FormLabel>\n );\n};\n","import {\n Button,\n Chip,\n ChipGroup,\n MenuToggle,\n MenuToggleStatus,\n Select,\n SelectList,\n SelectOption,\n TextInputGroup,\n TextInputGroupMain,\n TextInputGroupUtilities,\n} from \"@patternfly/react-core\";\nimport { TimesIcon } from \"@patternfly/react-icons\";\nimport { get } from \"lodash-es\";\nimport { useMemo, useRef, useState } from \"react\";\nimport {\n Controller,\n ControllerRenderProps,\n FieldPath,\n FieldValues,\n useFormContext,\n} from \"react-hook-form\";\nimport { getRuleValue } from \"../../utils/getRuleValue\";\nimport { FormLabel } from \"../FormLabel\";\nimport {\n OptionType,\n SelectControlOption,\n SelectControlProps,\n SelectVariant,\n isSelectBasedOptions,\n isString,\n key,\n} from \"./SelectControl\";\n\nconst getValue = (option: SelectControlOption | string) =>\n isString(option) ? option : option.value;\n\nexport const TypeaheadSelectControl = <\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n>({\n id,\n name,\n label,\n options,\n selectedOptions = [],\n controller,\n labelIcon,\n placeholderText,\n onFilter,\n variant,\n isFullWidth = true,\n ...rest\n}: SelectControlProps<T, P>) => {\n const {\n control,\n formState: { errors },\n } = useFormContext();\n const [open, setOpen] = useState(false);\n const [filterValue, setFilterValue] = useState(\"\");\n const [focusedItemIndex, setFocusedItemIndex] = useState<number>(0);\n const [selectedOptionsState, setSelectedOptions] = useState<\n SelectControlOption[]\n >([]);\n const textInputRef = useRef<HTMLInputElement>();\n const required = getRuleValue(controller.rules?.required) === true;\n const isTypeaheadMulti = variant === SelectVariant.typeaheadMulti;\n\n const combinedOptions = useMemo(\n () =>\n [\n ...options.filter(\n (o) => !selectedOptions.map((o) => getValue(o)).includes(getValue(o)),\n ),\n ...selectedOptions,\n ] as OptionType,\n [selectedOptions, options],\n );\n\n const filteredOptions = combinedOptions.filter((option) =>\n getValue(option).toLowerCase().startsWith(filterValue.toLowerCase()),\n );\n\n const updateValue = (\n option: string | string[],\n field: ControllerRenderProps<FieldValues, string>,\n ) => {\n if (field.value.includes(option)) {\n field.onChange(field.value.filter((item: string) => item !== option));\n if (isSelectBasedOptions(options)) {\n setSelectedOptions(\n selectedOptionsState.filter((item) => item.key !== option),\n );\n }\n } else {\n field.onChange([...field.value, option]);\n if (isSelectBasedOptions(combinedOptions)) {\n setSelectedOptions([\n ...selectedOptionsState,\n combinedOptions.find((o) => o.key === option)!,\n ]);\n }\n }\n };\n\n const onInputKeyDown = (\n event: React.KeyboardEvent<HTMLDivElement>,\n field: ControllerRenderProps<FieldValues, string>,\n ) => {\n const focusedItem = filteredOptions[focusedItemIndex];\n setOpen(true);\n\n switch (event.key) {\n case \"Enter\": {\n event.preventDefault();\n\n if (!isTypeaheadMulti) {\n setFilterValue(getValue(focusedItem));\n } else {\n setFilterValue(\"\");\n }\n\n updateValue(key(focusedItem), field);\n\n setOpen(false);\n setFocusedItemIndex(0);\n\n break;\n }\n case \"Tab\":\n case \"Escape\": {\n setOpen(false);\n field.onChange(undefined);\n break;\n }\n case \"Backspace\": {\n if (variant === SelectVariant.typeahead) {\n field.onChange(\"\");\n }\n break;\n }\n case \"ArrowUp\":\n case \"ArrowDown\": {\n event.preventDefault();\n\n let indexToFocus = 0;\n\n if (event.key === \"ArrowUp\") {\n if (focusedItemIndex === 0) {\n indexToFocus = options.length - 1;\n } else {\n indexToFocus = focusedItemIndex - 1;\n }\n }\n\n if (event.key === \"ArrowDown\") {\n if (focusedItemIndex === options.length - 1) {\n indexToFocus = 0;\n } else {\n indexToFocus = focusedItemIndex + 1;\n }\n }\n\n setFocusedItemIndex(indexToFocus);\n break;\n }\n }\n };\n\n return (\n <FormLabel\n id={id}\n name={name}\n label={label}\n isRequired={required}\n error={get(errors, name)}\n labelIcon={labelIcon}\n >\n <Controller\n {...controller}\n name={name}\n control={control}\n render={({ field }) => (\n <Select\n {...rest}\n onOpenChange={() => setOpen(false)}\n selected={\n isSelectBasedOptions(combinedOptions)\n ? combinedOptions\n .filter((o) =>\n Array.isArray(field.value)\n ? field.value.includes(o.key)\n : field.value === o.key,\n )\n .map((o) => o.value)\n : field.value\n }\n shouldFocusFirstItemOnOpen={false}\n toggle={(ref) => (\n <MenuToggle\n ref={ref}\n id={id || name}\n variant=\"typeahead\"\n onClick={() => {\n setOpen(!open);\n textInputRef.current?.focus();\n }}\n isExpanded={open}\n isFullWidth={isFullWidth}\n status={get(errors, name) ? MenuToggleStatus.danger : undefined}\n >\n <TextInputGroup isPlain>\n <TextInputGroupMain\n placeholder={placeholderText}\n value={\n variant === SelectVariant.typeahead && field.value\n ? isSelectBasedOptions(combinedOptions)\n ? combinedOptions.find(\n (o) =>\n o.key ===\n (Array.isArray(field.value)\n ? field.value[0]\n : field.value),\n )?.value\n : field.value\n : filterValue\n }\n onClick={() => setOpen(!open)}\n onChange={(_, value) => {\n setFilterValue(value);\n onFilter?.(value);\n }}\n onKeyDown={(event) => onInputKeyDown(event, field)}\n autoComplete=\"off\"\n innerRef={textInputRef}\n role=\"combobox\"\n isExpanded={open}\n aria-controls=\"select-typeahead-listbox\"\n >\n {variant === SelectVariant.typeaheadMulti &&\n Array.isArray(field.value) && (\n <ChipGroup aria-label=\"Current selections\">\n {field.value.map(\n (selection: string, index: number) => (\n <Chip\n key={index}\n onClick={(ev) => {\n ev.stopPropagation();\n field.onChange(\n field.value.filter(\n (item: string) => item !== key(selection),\n ),\n );\n }}\n >\n {isSelectBasedOptions(combinedOptions)\n ? [\n ...combinedOptions,\n ...selectedOptionsState,\n ].find((o) => selection === o.key)?.value\n : getValue(selection)}\n </Chip>\n ),\n )}\n </ChipGroup>\n )}\n </TextInputGroupMain>\n <TextInputGroupUtilities>\n {(!!filterValue || field.value) && (\n <Button\n variant=\"plain\"\n onClick={() => {\n setFilterValue(\"\");\n field.onChange(isTypeaheadMulti ? [] : \"\");\n textInputRef?.current?.focus();\n }}\n aria-label=\"Clear input value\"\n >\n <TimesIcon aria-hidden />\n </Button>\n )}\n </TextInputGroupUtilities>\n </TextInputGroup>\n </MenuToggle>\n )}\n onSelect={(event, v) => {\n event?.stopPropagation();\n const option = v?.toString();\n if (isTypeaheadMulti && Array.isArray(field.value)) {\n setFilterValue(\"\");\n updateValue(option || \"\", field);\n } else {\n field.onChange(Array.isArray(field.value) ? [option] : option);\n setOpen(false);\n }\n }}\n isOpen={open}\n >\n <SelectList>\n {filteredOptions.map((option, index) => (\n <SelectOption\n key={key(option)}\n value={key(option)}\n isFocused={focusedItemIndex === index}\n isActive={field.value.includes(getValue(option))}\n description={\n !isString(option) && \"description\" in option\n ? option.description\n : undefined\n }\n >\n {getValue(option)}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n )}\n />\n </FormLabel>\n );\n};\n","import { ChipGroupProps, SelectProps } from \"@patternfly/react-core\";\nimport {\n ControllerProps,\n FieldPath,\n FieldValues,\n UseControllerProps,\n} from \"react-hook-form\";\nimport { SingleSelectControl } from \"./SingleSelectControl\";\nimport { TypeaheadSelectControl } from \"./TypeaheadSelectControl\";\n\ntype Variant = `${SelectVariant}`;\n\nexport enum SelectVariant {\n single = \"single\",\n typeahead = \"typeahead\",\n typeaheadMulti = \"typeaheadMulti\",\n}\n\nexport type SelectControlOption = {\n key: string;\n value: string;\n description?: string;\n};\n\nexport type OptionType = string[] | SelectControlOption[];\n\nexport type SelectControlProps<\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n> = Omit<\n SelectProps,\n | \"name\"\n | \"toggle\"\n | \"selections\"\n | \"onSelect\"\n | \"onClear\"\n | \"isOpen\"\n | \"onFilter\"\n | \"variant\"\n> &\n UseControllerProps<T, P> & {\n name: string;\n label?: string;\n options: OptionType;\n selectedOptions?: OptionType;\n labelIcon?: string;\n controller: Omit<ControllerProps, \"name\" | \"render\">;\n onFilter?: (value: string) => void;\n variant?: Variant;\n isDisabled?: boolean;\n isFullWidth?: boolean;\n menuAppendTo?: string;\n placeholderText?: string;\n chipGroupProps?: ChipGroupProps;\n onSelect?: (\n value: string | string[],\n onChangeHandler: (value: string | string[]) => void,\n ) => void;\n };\n\nexport const isSelectBasedOptions = (\n options: OptionType,\n): options is SelectControlOption[] => typeof options[0] !== \"string\";\n\nexport const isString = (\n option: SelectControlOption | string,\n): option is string => typeof option === \"string\";\nexport const key = (option: SelectControlOption | string) =>\n isString(option) ? option : option.key;\n\nexport const SelectControl = <\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n>({\n variant = SelectVariant.single,\n ...rest\n}: SelectControlProps<T, P>) =>\n variant === SelectVariant.single ? (\n <SingleSelectControl {...rest} />\n ) : (\n <TypeaheadSelectControl {...rest} variant={variant} />\n );\n","import { UserProfileAttributeMetadata } from \"@keycloak/keycloak-admin-client/lib/defs/userProfileMetadata\";\nimport UserRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/userRepresentation\";\nimport { TFunction } from \"i18next\";\nimport { FieldPath } from \"react-hook-form\";\n\nexport type KeyValueType = { key: string; value: string };\n\nexport type UserFormFields = Omit<\n UserRepresentation,\n \"attributes\" | \"userProfileMetadata\"\n> & {\n attributes?: KeyValueType[] | Record<string, string | string[]>;\n};\n\ntype FieldError = {\n field: string;\n errorMessage: string;\n params?: unknown[];\n};\n\ntype ErrorArray = { errors?: FieldError[] };\n\nexport type UserProfileError = {\n responseData: ErrorArray | FieldError;\n};\n\nconst isBundleKey = (displayName: unknown) => {\n return displayName && typeof displayName === \"string\"\n ? displayName.includes(\"${\")\n : false;\n};\nconst unWrap = (key: string) => key.substring(2, key.length - 1);\n\nexport const label = (\n t: TFunction,\n text: string | undefined,\n fallback?: string,\n prefix?: string,\n) => {\n const value = text || fallback;\n const bundleKey = isBundleKey(value) ? unWrap(value!) : value;\n const key = prefix ? `${prefix}.${bundleKey}` : bundleKey;\n return t(key || \"\");\n};\n\nexport const labelAttribute = (\n t: TFunction,\n attribute: UserProfileAttributeMetadata,\n) => label(t, attribute.displayName, attribute.name);\n\nconst ROOT_ATTRIBUTES = [\"username\", \"firstName\", \"lastName\", \"email\"];\n\nexport const isRootAttribute = (attr?: string) =>\n attr && ROOT_ATTRIBUTES.includes(attr);\n\nexport const fieldName = (name?: string) =>\n `${isRootAttribute(name) ? \"\" : \"attributes.\"}${name?.replaceAll(\n \".\",\n \"🍺\",\n )}` as FieldPath<UserFormFields>;\n\nexport const beerify = <T extends string>(name: T) =>\n name.replaceAll(\".\", \"🍺\");\n\nexport const debeerify = <T extends string>(name: T) =>\n name.replaceAll(\"🍺\", \".\");\n\nexport function setUserProfileServerError<T>(\n error: UserProfileError,\n setError: (field: keyof T, params: object) => void,\n t: TFunction,\n) {\n (\n ((error.responseData as ErrorArray).errors !== undefined\n ? (error.responseData as ErrorArray).errors\n : [error.responseData]) as FieldError[]\n ).forEach((e) => {\n const params = Object.assign(\n {},\n e.params?.map((p) => (isBundleKey(p) ? t(unWrap(p as string)) : p)),\n );\n setError(fieldName(e.field) as keyof T, {\n message: t(\n isBundleKey(e.errorMessage) ? unWrap(e.errorMessage) : e.errorMessage,\n {\n /* eslint-disable @typescript-eslint/no-misused-spread */\n ...params,\n defaultValue: e.errorMessage || e.field,\n },\n ),\n type: \"server\",\n });\n });\n}\n\nexport function isRequiredAttribute({\n required,\n}: UserProfileAttributeMetadata): boolean {\n // Check if required is true\n return required as boolean;\n}\n\nexport function isUserProfileError(error: unknown): error is UserProfileError {\n // Check if the error is an object with a 'responseData' property.\n if (\n typeof error !== \"object\" ||\n error === null ||\n !(\"responseData\" in error)\n ) {\n return false;\n }\n\n const { responseData } = error;\n\n if (isFieldError(responseData)) {\n return true;\n }\n\n // Check if 'responseData' is an object with an 'errors' property that is an array.\n if (\n typeof responseData !== \"object\" ||\n responseData === null ||\n !(\"errors\" in responseData) ||\n !Array.isArray(responseData.errors)\n ) {\n return false;\n }\n\n // Check if all errors are field errors.\n return responseData.errors.every(isFieldError);\n}\n\nfunction isFieldError(error: unknown): error is FieldError {\n // Check if the error is an object.\n if (typeof error !== \"object\" || error === null) {\n return false;\n }\n\n // Check if the error object has a 'field' property that is a string.\n if (!(\"field\" in error) || typeof error.field !== \"string\") {\n return false;\n }\n\n // Check if the error object has an 'errorMessage' property that is a string.\n if (!(\"errorMessage\" in error) || typeof error.errorMessage !== \"string\") {\n return false;\n }\n\n return true;\n}\n","import {\n Controller,\n FieldValues,\n FieldPath,\n UseControllerProps,\n PathValue,\n useFormContext,\n} from \"react-hook-form\";\nimport { SwitchProps, Switch } from \"@patternfly/react-core\";\nimport { FormLabel } from \"./FormLabel\";\nimport { debeerify } from \"../user-profile/utils\";\n\nexport type SwitchControlProps<\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n> = Omit<SwitchProps, \"name\" | \"defaultValue\" | \"ref\"> &\n UseControllerProps<any, P> & {\n name: string;\n label?: string;\n labelIcon?: string;\n labelOn: string;\n labelOff: string;\n stringify?: boolean;\n };\n\nexport const SwitchControl = <\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n>({\n labelOn,\n stringify,\n defaultValue,\n labelIcon,\n ...props\n}: SwitchControlProps<T, P>) => {\n const fallbackValue = stringify ? \"false\" : false;\n const defValue = defaultValue ?? (fallbackValue as PathValue<T, P>);\n const { control } = useFormContext();\n return (\n <FormLabel\n hasNoPaddingTop\n name={props.name}\n isRequired={props.rules?.required === true}\n label={props.label}\n labelIcon={labelIcon}\n >\n <Controller\n control={control}\n name={props.name}\n defaultValue={defValue}\n render={({ field: { onChange, value } }) => (\n <Switch\n {...props}\n id={props.name}\n data-testid={debeerify(props.name)}\n label={labelOn}\n aria-label={props.label}\n isChecked={stringify ? value === \"true\" : value}\n onChange={(e, checked) => {\n const value = stringify ? checked.toString() : checked;\n props.onChange?.(e, checked);\n onChange(value);\n }}\n />\n )}\n />\n </FormLabel>\n );\n};\n","import {\n TextArea,\n TextAreaProps,\n ValidatedOptions,\n} from \"@patternfly/react-core\";\nimport {\n FieldPath,\n FieldValues,\n PathValue,\n UseControllerProps,\n useController,\n} from \"react-hook-form\";\n\nimport { FormLabel } from \"./FormLabel\";\n\nexport type TextAreaControlProps<\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n> = UseControllerProps<T, P> &\n TextAreaProps & {\n label: string;\n labelIcon?: string;\n isDisabled?: boolean;\n };\n\nexport const TextAreaControl = <\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n>(\n props: TextAreaControlProps<T, P>,\n) => {\n const required = !!props.rules?.required;\n const defaultValue = props.defaultValue ?? (\"\" as PathValue<T, P>);\n\n const { field, fieldState } = useController({\n ...props,\n defaultValue,\n });\n\n return (\n <FormLabel\n isRequired={required}\n label={props.label}\n labelIcon={props.labelIcon}\n name={props.name}\n error={fieldState.error}\n >\n <TextArea\n isRequired={required}\n id={props.name}\n data-testid={props.name}\n validated={\n fieldState.error ? ValidatedOptions.error : ValidatedOptions.default\n }\n isDisabled={props.isDisabled}\n {...props}\n {...field}\n />\n </FormLabel>\n );\n};\n","import {\n FormHelperText,\n HelperText,\n HelperTextItem,\n TextInput,\n TextInputProps,\n ValidatedOptions,\n} from \"@patternfly/react-core\";\nimport { ReactNode } from \"react\";\nimport {\n FieldPath,\n FieldValues,\n PathValue,\n UseControllerProps,\n useController,\n} from \"react-hook-form\";\nimport { getRuleValue } from \"../utils/getRuleValue\";\nimport { FormLabel } from \"./FormLabel\";\n\nexport type TextControlProps<\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n> = UseControllerProps<T, P> &\n Omit<TextInputProps, \"name\" | \"isRequired\" | \"required\"> & {\n label: string;\n labelIcon?: string | ReactNode;\n isDisabled?: boolean;\n helperText?: string;\n \"data-testid\"?: string;\n type?: string;\n };\n\nexport const TextControl = <\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n>(\n props: TextControlProps<T, P>,\n) => {\n const { labelIcon, helperText, ...rest } = props;\n const required = !!getRuleValue(props.rules?.required);\n const defaultValue = props.defaultValue ?? (\"\" as PathValue<T, P>);\n\n const { field, fieldState } = useController({\n ...props,\n defaultValue,\n });\n\n return (\n <FormLabel\n name={props.name}\n label={props.label}\n labelIcon={labelIcon}\n isRequired={required}\n error={fieldState.error}\n >\n <TextInput\n isRequired={required}\n id={props.name}\n data-testid={props[\"data-testid\"] || props.name}\n validated={\n fieldState.error ? ValidatedOptions.error : ValidatedOptions.default\n }\n isDisabled={props.isDisabled}\n {...rest}\n {...field}\n />\n {helperText && (\n <FormHelperText>\n <HelperText>\n <HelperTextItem>{helperText}</HelperTextItem>\n </HelperText>\n </FormHelperText>\n )}\n </FormLabel>\n );\n};\n","// TODO: Remove code once the following issue has been fixed:\n// https://github.com/patternfly/patternfly-react/issues/10192\nimport { TextArea } from \"@patternfly/react-core\";\nimport {\n ComponentProps,\n HTMLProps,\n type ForwardRefExoticComponent,\n type RefAttributes,\n} from \"react\";\n\n// PatternFly changes the signature of the 'onFocus' and 'onBlur' handlers for textarea elements.\n// This causes issues with React Hook Form as it expects the default signature for a textarea element.\n// So we have to create this wrapper component that takes care of converting these signatures for us.\n\nexport type KeycloakTextAreaProps = Omit<\n ComponentProps<typeof TextArea>,\n \"onFocus\" | \"onBlur\"\n> &\n Pick<HTMLProps<HTMLTextAreaElement>, \"onFocus\" | \"onBlur\">;\n\nexport const KeycloakTextArea = TextArea as ForwardRefExoticComponent<\n KeycloakTextAreaProps & RefAttributes<HTMLTextAreaElement>\n>;\n","import {\n FileUpload,\n ValidatedOptions,\n FileUploadProps,\n} from \"@patternfly/react-core\";\nimport { ReactNode, useState } from \"react\";\nimport {\n FieldPath,\n FieldValues,\n PathValue,\n UseControllerProps,\n useController,\n} from \"react-hook-form\";\nimport { getRuleValue } from \"../utils/getRuleValue\";\nimport { FormLabel } from \"./FormLabel\";\nimport { useTranslation } from \"react-i18next\";\n\nexport type FileUploadControlProps<\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n> = UseControllerProps<T, P> &\n Omit<FileUploadProps, \"name\" | \"isRequired\" | \"required\"> & {\n label: string;\n labelIcon?: string | ReactNode;\n isDisabled?: boolean;\n \"data-testid\"?: string;\n type?: string;\n };\n\nexport const FileUploadControl = <\n T extends FieldValues,\n P extends FieldPath<T> = FieldPath<T>,\n>(\n props: FileUploadControlProps<T, P>,\n) => {\n const { labelIcon, ...rest } = props;\n const required = !!getRuleValue(props.rules?.required);\n const defaultValue = props.defaultValue ?? (\"\" as PathValue<T, P>);\n\n const { t } = useTranslation();\n\n const [filename, setFilename] = useState<string>(\"\");\n\n const { field, fieldState } = useController({\n ...props,\n defaultValue,\n });\n\n return (\n <FormLabel\n name={props.name}\n label={props.label}\n labelIcon={labelIcon}\n isRequired={required}\n error={fieldState.error}\n >\n <FileUpload\n isRequired={required}\n data-testid={props[\"data-testid\"] || props.name}\n filename={filename}\n browseButtonText={t(\"browse\")}\n validated={\n fieldState.error ? ValidatedOptions.error : ValidatedOptions.default\n }\n hideDefaultPreview\n isDisabled={props.isDisabled}\n type=\"text\"\n onFileInputChange={(_, file) => {\n field.onChange(file);\n setFilename(file.name);\n }}\n onClearClick={() => {\n field.onChange(null);\n setFilename(\"\");\n }}\n {...rest}\n {...field}\n />\n </FormLabel>\n );\n};\n","import { Icon } from \"@patternfly/react-core\";\nimport {\n BitbucketIcon,\n CubeIcon,\n FacebookSquareIcon,\n GithubIcon,\n GitlabIcon,\n GoogleIcon,\n InstagramIcon,\n LinkedinIcon,\n MicrosoftIcon,\n OpenshiftIcon,\n PaypalIcon,\n StackOverflowIcon,\n TwitterIcon,\n} from \"@patternfly/react-icons\";\n\ntype IconMapperProps = {\n icon: string;\n};\n\nexport const IconMapper = ({ icon }: IconMapperProps) => {\n const SpecificIcon = getIcon(icon);\n return (\n <Icon size=\"lg\">\n <SpecificIcon alt={icon} />\n </Icon>\n );\n};\n\nfunction getIcon(icon: string) {\n switch (icon) {\n case \"github\":\n return GithubIcon;\n case \"facebook\":\n return FacebookSquareIcon;\n case \"gitlab\":\n return GitlabIcon;\n case \"google\":\n return GoogleIcon;\n case \"linkedin\":\n case \"linkedin-openid-connect\":\n return LinkedinIcon;\n\n case \"openshift-v4\":\n return OpenshiftIcon;\n case \"stackoverflow\":\n return StackOverflowIcon;\n case \"twitter\":\n return TwitterIcon;\n case \"microsoft\":\n return MicrosoftIcon;\n case \"bitbucket\":\n return BitbucketIcon;\n case \"instagram\":\n return InstagramIcon;\n case \"paypal\":\n return PaypalIcon;\n default:\n return CubeIcon;\n }\n}\n","import { Title, TitleProps } from \"@patternfly/react-core\";\n\nimport style from \"./form-title.module.css\";\n\ntype FormTitleProps = Omit<TitleProps, \"headingLevel\"> & {\n id?: string;\n title: string;\n headingLevel?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n};\n\nexport const FormTitle = ({\n id,\n title,\n headingLevel = \"h1\",\n size = \"xl\",\n ...rest\n}: FormTitleProps) => (\n <Title\n headingLevel={headingLevel}\n size={size}\n className={style.title}\n id={id}\n tabIndex={0} // so that jumpLink sends focus to the section for a11y\n {...rest}\n >\n {title}\n </Title>\n);\n","import { Card, CardBody, CardHeader, CardTitle } from \"@patternfly/react-core\";\nimport { PropsWithChildren, useId } from \"react\";\nimport { FormTitle } from \"./FormTitle\";\n\ntype FormPanelProps = {\n title: string;\n scrollId?: string;\n className?: string;\n};\n\nexport const FormPanel = ({\n title,\n children,\n scrollId,\n className,\n}: PropsWithChildren<FormPanelProps>) => {\n const id = useId();\n\n return (\n <Card id={id} className={className} isFlat>\n <CardHeader className=\"kc-form-panel__header\">\n <CardTitle tabIndex={0}>\n <FormTitle id={scrollId} title={title} />\n </CardTitle>\n </CardHeader>\n <CardBody className=\"kc-form-panel__body\">{children}</CardBody>\n </Card>\n );\n};\n","/* eslint-disable react/jsx-no-useless-fragment */\n// See: https://github.com/i18next/react-i18next/issues/1543\nimport { HTMLProps } from \"react\";\nimport { FormTitle } from \"./FormTitle\";\n\ntype ScrollPanelProps = HTMLProps<HTMLFormElement> & {\n title: string;\n scrollId: string;\n};\n\nexport const ScrollPanel = (props: ScrollPanelProps) => {\n const { title, children, scrollId, ...rest } = props;\n return (\n <section {...rest} style={{ marginTop: \"var(--pf-v5-global--spacer--lg)\" }}>\n <>\n <FormTitle id={scrollId} title={title} />\n {children}\n </>\n </section>\n );\n};\n","import {\n Grid,\n GridItem,\n GridProps,\n JumpLinks,\n JumpLinksItem,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { Fragment, ReactNode, useMemo } from \"react\";\nimport { FormPanel } from \"./FormPanel\";\nimport { ScrollPanel } from \"./ScrollPanel\";\n\nimport style from \"./scroll-form.module.css\";\n\nexport const mainPageContentId = \"kc-main-content-page-container\";\n\ntype ScrollSection = {\n title: string;\n panel: ReactNode;\n isHidden?: boolean;\n};\n\ntype ScrollFormProps = GridProps & {\n label: string;\n sections: ScrollSection[];\n borders?: boolean;\n};\n\nconst spacesToHyphens = (string: string): string => {\n return string.replace(/\\s+/g, \"-\");\n};\n\nexport const ScrollForm = ({\n label,\n sections,\n borders = false,\n ...rest\n}: ScrollFormProps) => {\n const shownSections = useMemo(\n () => sections.filter(({ isHidden }) => !isHidden),\n [sections],\n );\n\n return (\n <Grid hasGutter {...rest}>\n <GridItem md={8} sm={12}>\n {shownSections.map(({ title, panel }) => {\n const scrollId = spacesToHyphens(title.toLowerCase());\n\n return (\n <Fragment key={title}>\n {borders ? (\n <FormPanel\n scrollId={scrollId}\n title={title}\n className={style.panel}\n >\n {panel}\n </FormPanel>\n ) : (\n <ScrollPanel scrollId={scrollId} title={title}>\n {panel}\n </ScrollPanel>\n )}\n </Fragment>\n );\n })}\n </GridItem>\n <GridItem md={4} sm={12} order={{ default: \"-1\", md: \"1\" }}>\n <PageSection className={style.sticky}>\n <JumpLinks\n isVertical\n // scrollableSelector has to point to the id of the element whose scrollTop changes\n // to scroll the entire main section, it has to be the pf-v5-c-page__main\n scrollableSelector={`#${mainPageContentId}`}\n label={label}\n offset={100}\n >\n {shownSections.map(({ title }) => {\n const scrollId = spacesToHyphens(title.toLowerCase());\n\n return (\n <JumpLinksItem\n key={title}\n onClick={() => {\n const element = document.getElementById(scrollId);\n if (element) {\n element.scrollIntoView({\n behavior: \"smooth\",\n block: \"start\",\n });\n }\n }}\n data-testid={`jump-link-${scrollId}`}\n >\n {title}\n </JumpLinksItem>\n );\n })}\n </JumpLinks>\n </PageSection>\n </GridItem>\n </Grid>\n );\n};\n","import { Button, ButtonProps } from \"@patternfly/react-core\";\nimport { PropsWithChildren } from \"react\";\nimport { FieldValues, FormState } from \"react-hook-form\";\n\nexport type FormSubmitButtonProps = Omit<ButtonProps, \"isDisabled\"> & {\n formState: FormState<FieldValues>;\n allowNonDirty?: boolean;\n allowInvalid?: boolean;\n isDisabled?: boolean;\n};\n\nconst isSubmittable = (\n formState: FormState<FieldValues>,\n allowNonDirty: boolean,\n allowInvalid: boolean,\n) => {\n return (\n (formState.isValid || allowInvalid) &&\n (formState.isDirty || allowNonDirty) &&\n !formState.isLoading &&\n !formState.isValidating &&\n !formState.isSubmitting\n );\n};\n\nexport const FormSubmitButton = ({\n formState,\n isDisabled = false,\n allowInvalid = false,\n allowNonDirty = false,\n children,\n ...rest\n}: PropsWithChildren<FormSubmitButtonProps>) => {\n return (\n <Button\n variant=\"primary\"\n isDisabled={\n (formState && !isSubmittable(formState, allowNonDirty, allowInvalid)) ||\n isDisabled\n }\n {...rest}\n type=\"submit\"\n >\n {children}\n </Button>\n );\n};\n","import { useMemo } from \"react\";\nimport { FormProvider } from \"react-hook-form\";\nimport { SelectControl } from \"../controls/select-control/SelectControl\";\nimport { UserProfileFieldProps } from \"./UserProfileFields\";\n\nconst localeToDisplayName = (locale: string) => {\n try {\n return new Intl.DisplayNames([locale], { type: \"language\" }).of(locale);\n } catch {\n return locale;\n }\n};\n\ntype LocaleSelectorProps = Omit<UserProfileFieldProps, \"inputType\"> & {\n supportedLocales: string[];\n currentLocale: string;\n};\n\nexport const LocaleSelector = ({\n t,\n form,\n supportedLocales,\n currentLocale,\n}: LocaleSelectorProps) => {\n const locales = useMemo(\n () =>\n supportedLocales\n .map((locale) => ({\n key: locale,\n value: t(`locale_${locale}`, localeToDisplayName(locale) ?? locale),\n }))\n .sort((a, b) => a.value.localeCompare(b.value, currentLocale)),\n [supportedLocales, currentLocale, t],\n );\n\n if (!locales.length) {\n return null;\n }\n return (\n <FormProvider {...form}>\n <SelectControl\n data-testid=\"locale-select\"\n name=\"attributes.locale\"\n label={t(\"selectALocale\")}\n controller={{ defaultValue: \"\" }}\n options={[{ key: \"\", value: t(\"defaultLocale\") }, ...locales]}\n variant={locales.length >= 10 ? \"typeahead\" : \"single\"}\n />\n </FormProvider>\n );\n};\n","import { UserProfileAttributeMetadata } from \"@keycloak/keycloak-admin-client/lib/defs/userProfileMetadata\";\nimport { FormGroup, InputGroup } from \"@patternfly/react-core\";\nimport { TFunction } from \"i18next\";\nimport { get } from \"lodash-es\";\nimport { PropsWithChildren, ReactNode } from \"react\";\nimport { UseFormReturn, type FieldError } from \"react-hook-form\";\n\nimport { FormErrorText } from \"../controls/FormErrorText\";\nimport { HelpItem } from \"../controls/HelpItem\";\nimport {\n UserFormFields,\n fieldName,\n isRequiredAttribute,\n label,\n labelAttribute,\n} from \"./utils\";\n\nexport type UserProfileGroupProps = {\n t: TFunction;\n form: UseFormReturn<UserFormFields>;\n attribute: UserProfileAttributeMetadata;\n renderer?: (attribute: UserProfileAttributeMetadata) => ReactNode;\n};\n\nexport const UserProfileGroup = ({\n t,\n form,\n attribute,\n renderer,\n children,\n}: PropsWithChildren<UserProfileGroupProps>) => {\n const helpText = label(\n t,\n attribute.annotations?.[\"inputHelperTextBefore\"] as string,\n );\n const {\n formState: { errors },\n } = form;\n\n const component = renderer?.(attribute);\n const error = get(errors, fieldName(attribute.name)) as FieldError;\n\n return (\n <FormGroup\n key={attribute.name}\n label={labelAttribute(t, attribute) || \"\"}\n fieldId={attribute.name}\n isRequired={isRequiredAttribute(attribute)}\n labelIcon={\n helpText ? (\n <HelpItem helpText={helpText} fieldLabelId={attribute.name!} />\n ) : undefined\n }\n >\n {component ? (\n <InputGroup>\n {children}\n {component}\n </InputGroup>\n ) : (\n children\n )}\n {error && (\n <FormErrorText\n data-testid={`${attribute.name}-helper`}\n message={error.message as string}\n />\n )}\n </FormGroup>\n );\n};\n","import {\n Button,\n ButtonVariant,\n InputGroup,\n TextInput,\n TextInputProps,\n TextInputTypes,\n InputGroupItem,\n} from \"@patternfly/react-core\";\nimport { MinusCircleIcon, PlusCircleIcon } from \"@patternfly/react-icons\";\nimport { type TFunction } from \"i18next\";\nimport { Fragment, useEffect, useMemo } from \"react\";\nimport { FieldPath, UseFormReturn, useWatch } from \"react-hook-form\";\n\nimport { InputType, UserProfileFieldProps } from \"./UserProfileFields\";\nimport { UserProfileGroup } from \"./UserProfileGroup\";\nimport { UserFormFields, fieldName, labelAttribute } from \"./utils\";\n\nexport const MultiInputComponent = ({\n t,\n form,\n attribute,\n renderer,\n ...rest\n}: UserProfileFieldProps) => (\n <UserProfileGroup t={t} form={form} attribute={attribute} renderer={renderer}>\n <MultiLineInput\n t={t}\n form={form}\n aria-label={labelAttribute(t, attribute)}\n name={fieldName(attribute.name)!}\n defaultValue={[attribute.defaultValue || \"\"]}\n addButtonLabel={t(\"addMultivaluedLabel\", {\n fieldLabel: labelAttribute(t, attribute),\n })}\n {...rest}\n />\n </UserProfileGroup>\n);\n\nexport type MultiLineInputProps = Omit<TextInputProps, \"form\"> & {\n t: TFunction;\n name: FieldPath<UserFormFields>;\n form: UseFormReturn<UserFormFields>;\n addButtonLabel?: string;\n isDisabled?: boolean;\n defaultValue?: string[];\n inputType: InputType;\n};\n\nconst MultiLineInput = ({\n t,\n name,\n inputType,\n form,\n addButtonLabel,\n isDisabled = false,\n defaultValue,\n id,\n ...rest\n}: MultiLineInputProps) => {\n const { register, setValue, control } = form;\n const value = useWatch({\n name,\n control,\n defaultValue: defaultValue || \"\",\n });\n\n const fields = useMemo<string[]>(() => {\n return Array.isArray(value) && value.length !== 0\n ? value\n : defaultValue || [\"\"];\n }, [value]);\n\n const remove = (index: number) => {\n update([...fields.slice(0, index), ...fields.slice(index + 1)]);\n };\n\n const append = () => {\n update([...fields, \"\"]);\n };\n\n const updateValue = (index: number, value: string) => {\n update([...fields.slice(0, index), value, ...fields.slice(index + 1)]);\n };\n\n const update = (values: string[]) => {\n const fieldValue = values.flatMap((field) => field);\n setValue(name, fieldValue, {\n shouldDirty: true,\n });\n };\n\n const type = inputType.startsWith(\"html\")\n ? (inputType.substring(\"html\".length + 2) as TextInputTypes)\n : \"text\";\n\n useEffect(() => {\n register(name);\n }, [register]);\n\n return (\n <div id={id}>\n {fields.map((value, index) => (\n <Fragment key={index}>\n <InputGroup>\n <InputGroupItem isFill>\n <TextInput\n data-testid={name + index}\n onChange={(_event, value) => updateValue(index, value)}\n name={`${name}.${index}.value`}\n value={value}\n isDisabled={isDisabled}\n type={type}\n {...rest}\n />\n </InputGroupItem>\n <InputGroupItem>\n <Button\n data-testid={\"remove\" + index}\n variant={ButtonVariant.link}\n onClick={() => remove(index)}\n tabIndex={-1}\n aria-label={t(\"remove\")}\n isDisabled={fields.length === 1 || isDisabled}\n >\n <MinusCircleIcon />\n </Button>\n </InputGroupItem>\n </InputGroup>\n {index === fields.length - 1 && (\n <Button\n variant={ButtonVariant.link}\n onClick={append}\n tabIndex={-1}\n aria-label={t(\"add\")}\n data-testid=\"addValue\"\n isDisabled={!value || isDisabled}\n >\n <PlusCircleIcon /> {t(addButtonLabel || \"add\")}\n </Button>\n )}\n </Fragment>\n ))}\n </div>\n );\n};\n","import { Checkbox, Radio } from \"@patternfly/react-core\";\nimport { Controller } from \"react-hook-form\";\nimport {\n OptionLabel,\n Options,\n UserProfileFieldProps,\n} from \"./UserProfileFields\";\nimport { UserProfileGroup } from \"./UserProfileGroup\";\nimport { fieldName, isRequiredAttribute, label } from \"./utils\";\n\nexport const OptionComponent = (props: UserProfileFieldProps) => {\n const { form, inputType, attribute } = props;\n const isRequired = isRequiredAttribute(attribute);\n const isMultiSelect = inputType.startsWith(\"multiselect\");\n const Component = isMultiSelect ? Checkbox : Radio;\n const options =\n (attribute.validators?.options as Options | undefined)?.options || [];\n\n const optionLabel =\n (attribute.annotations?.[\"inputOptionLabels\"] as OptionLabel) || {};\n const prefix = attribute.annotations?.[\n \"inputOptionLabelsI18nPrefix\"\n ] as string;\n\n return (\n <UserProfileGroup {...props}>\n <Controller\n name={fieldName(attribute.name)}\n control={form.control}\n defaultValue={attribute.defaultValue}\n render={({ field }) => (\n <>\n {options.map((option) => (\n <Component\n key={option}\n id={option}\n data-testid={option}\n label={label(props.t, optionLabel[option], option, prefix)}\n value={option}\n isChecked={field.value?.includes(option)}\n onChange={() => {\n if (isMultiSelect) {\n if (field.value?.includes(option)) {\n field.onChange(\n field.value?.filter((item: string) => item !== option),\n );\n } else {\n field.onChange([...(field.value || []), option]);\n }\n } else {\n field.onChange([option]);\n }\n }}\n readOnly={attribute.readOnly}\n isRequired={isRequired}\n />\n ))}\n </>\n )}\n />\n </UserProfileGroup>\n );\n};\n","import {\n MenuToggle,\n Select,\n SelectList,\n SelectOptionProps,\n} from \"@patternfly/react-core\";\nimport { Children, useRef, useState } from \"react\";\nimport { KeycloakSelectProps, propertyToString } from \"./KeycloakSelect\";\n\ntype SingleSelectProps = Omit<KeycloakSelectProps, \"variant\">;\n\nexport const SingleSelect = ({\n toggleId,\n onToggle,\n onSelect,\n selections,\n isOpen,\n menuAppendTo,\n direction,\n width,\n maxHeight,\n toggleIcon,\n className,\n isDisabled,\n children,\n ...props\n}: SingleSelectProps) => {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLElement>();\n const toggle = () => {\n setOpen(!open);\n onToggle(!open);\n };\n\n const append = () => {\n if (menuAppendTo === \"parent\") {\n return ref.current?.parentElement || \"inline\";\n }\n return \"inline\";\n };\n\n const childArray = Children.toArray(\n children,\n ) as React.ReactElement<SelectOptionProps>[];\n\n return (\n <Select\n ref={ref}\n maxMenuHeight={propertyToString(maxHeight)}\n isScrollable\n popperProps={{\n appendTo: append(),\n direction,\n width: propertyToString(width),\n }}\n {...props}\n onClick={toggle}\n onOpenChange={(isOpen) => {\n if (isOpen !== open) toggle();\n }}\n selected={selections}\n onSelect={(_, value) => {\n onSelect?.(value || \"\");\n toggle();\n }}\n toggle={(ref) => (\n <MenuToggle\n id={toggleId}\n ref={ref}\n className={className}\n onClick={toggle}\n isExpanded={isOpen}\n aria-label={props[\"aria-label\"]}\n icon={toggleIcon}\n isDisabled={isDisabled}\n isFullWidth\n >\n {childArray.find((c) => c.props.value === selections)?.props\n .children ||\n selections ||\n props[\"aria-label\"]}\n </MenuToggle>\n )}\n isOpen={isOpen}\n >\n <SelectList>{children}</SelectList>\n </Select>\n );\n};\n","import {\n Button,\n Chip,\n ChipGroup,\n MenuFooter,\n MenuToggle,\n MenuToggleStatus,\n Select,\n SelectList,\n SelectOptionProps,\n TextInputGroup,\n TextInputGroupMain,\n TextInputGroupUtilities,\n} from \"@patternfly/react-core\";\nimport { TimesIcon } from \"@patternfly/react-icons\";\nimport { Children, useRef, useState } from \"react\";\nimport {\n KeycloakSelectProps,\n SelectVariant,\n propertyToString,\n} from \"./KeycloakSelect\";\n\nexport const TypeaheadSelect = ({\n toggleId,\n onSelect,\n onToggle,\n onFilter,\n variant,\n validated,\n placeholderText,\n maxHeight,\n width,\n toggleIcon,\n direction,\n selections,\n typeAheadAriaLabel,\n chipGroupComponent,\n chipGroupProps,\n footer,\n isDisabled,\n children,\n ...rest\n}: KeycloakSelectProps) => {\n const [filterValue, setFilterValue] = useState(\"\");\n const [focusedItemIndex, setFocusedItemIndex] = useState<number>(0);\n const textInputRef = useRef<HTMLInputElement>();\n\n const childArray = Children.toArray(\n children,\n ) as React.ReactElement<SelectOptionProps>[];\n\n const toggle = () => {\n onToggle?.(!rest.isOpen);\n };\n\n const onInputKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const focusedItem = childArray[focusedItemIndex];\n onToggle?.(true);\n\n switch (event.key) {\n case \"Enter\": {\n event.preventDefault();\n\n if (variant !== SelectVariant.typeaheadMulti) {\n setFilterValue(focusedItem.props.value);\n } else {\n setFilterValue(\"\");\n }\n onSelect?.(focusedItem.props.value);\n onToggle?.(false);\n setFocusedItemIndex(0);\n\n break;\n }\n case \"Escape\": {\n onToggle?.(false);\n break;\n }\n case \"Backspace\": {\n if (variant === SelectVariant.typeahead) {\n onSelect?.(\"\");\n }\n break;\n }\n case \"ArrowUp\":\n case \"ArrowDown\": {\n event.preventDefault();\n\n let indexToFocus = 0;\n\n if (event.key === \"ArrowUp\") {\n if (focusedItemIndex === 0) {\n indexToFocus = childArray.length - 1;\n } else {\n indexToFocus = focusedItemIndex - 1;\n }\n }\n\n if (event.key === \"ArrowDown\") {\n if (focusedItemIndex === childArray.length - 1) {\n indexToFocus = 0;\n } else {\n indexToFocus = focusedItemIndex + 1;\n }\n }\n\n setFocusedItemIndex(indexToFocus);\n break;\n }\n }\n };\n\n return (\n <Select\n {...rest}\n onClick={toggle}\n onOpenChange={(isOpen) => onToggle?.(isOpen)}\n onSelect={(_, value) => {\n onSelect?.(value || \"\");\n onFilter?.(\"\");\n setFilterValue(\"\");\n }}\n maxMenuHeight={propertyToString(maxHeight)}\n popperProps={{ direction, width: propertyToString(width) }}\n toggle={(ref) => (\n <MenuToggle\n ref={ref}\n id={toggleId}\n variant=\"typeahead\"\n onClick={() => onToggle?.(true)}\n icon={toggleIcon}\n isDisabled={isDisabled}\n isExpanded={rest.isOpen}\n isFullWidth\n status={validated === \"error\" ? MenuToggleStatus.danger : undefined}\n >\n <TextInputGroup isPlain>\n <TextInputGroupMain\n placeholder={placeholderText}\n value={\n variant === SelectVariant.typeahead && selections\n ? (selections as string)\n : filterValue\n }\n onClick={toggle}\n onChange={(_, value) => {\n setFilterValue(value);\n onFilter?.(value);\n }}\n onKeyDown={(event) => onInputKeyDown(event)}\n autoComplete=\"off\"\n innerRef={textInputRef}\n role=\"combobox\"\n isExpanded={rest.isOpen}\n aria-controls=\"select-typeahead-listbox\"\n aria-label={typeAheadAriaLabel}\n >\n {variant === SelectVariant.typeaheadMulti &&\n Array.isArray(selections) &&\n (chipGroupComponent ? (\n chipGroupComponent\n ) : (\n <ChipGroup {...chipGroupProps}>\n {selections.map((selection, index: number) => (\n <Chip\n key={index}\n onClick={(ev) => {\n ev.stopPropagation();\n onSelect?.(selection);\n }}\n >\n {selection}\n </Chip>\n ))}\n </ChipGroup>\n ))}\n </TextInputGroupMain>\n <TextInputGroupUtilities>\n {!!filterValue && (\n <Button\n variant=\"plain\"\n onClick={() => {\n onSelect?.(\"\");\n setFilterValue(\"\");\n onFilter?.(\"\");\n textInputRef?.current?.focus();\n }}\n aria-label=\"Clear input value\"\n >\n <TimesIcon aria-hidden />\n </Button>\n )}\n </TextInputGroupUtilities>\n </TextInputGroup>\n </MenuToggle>\n )}\n >\n <SelectList>{children}</SelectList>\n {footer && <MenuFooter>{footer}</MenuFooter>}\n </Select>\n );\n};\n","import { ChipGroupProps, SelectProps } from \"@patternfly/react-core\";\nimport { SingleSelect } from \"./SingleSelect\";\nimport { TypeaheadSelect } from \"./TypeaheadSelect\";\n\nexport type Variant = `${SelectVariant}`;\n\nexport enum SelectVariant {\n single = \"single\",\n typeahead = \"typeahead\",\n typeaheadMulti = \"typeaheadMulti\",\n}\n\nexport const propertyToString = (prop: string | number | undefined) =>\n typeof prop === \"number\" ? prop + \"px\" : prop;\n\nexport type KeycloakSelectProps<> = Omit<\n SelectProps,\n \"name\" | \"toggle\" | \"selected\" | \"onClick\" | \"onSelect\" | \"variant\"\n> & {\n toggleId?: string;\n onFilter?: (value: string) => void;\n onClear?: () => void;\n variant?: Variant;\n isDisabled?: boolean;\n menuAppendTo?: string;\n maxHeight?: string | number;\n width?: string | number;\n toggleIcon?: React.ReactElement;\n direction?: \"up\" | \"down\";\n placeholderText?: string;\n onSelect?: (value: string | number | object) => void;\n onToggle: (val: boolean) => void;\n selections?: string | string[] | number | number[];\n validated?: \"success\" | \"warning\" | \"error\" | \"default\";\n typeAheadAriaLabel?: string;\n chipGroupProps?: Omit<ChipGroupProps, \"children\" | \"ref\">;\n chipGroupComponent?: React.ReactNode;\n footer?: React.ReactNode;\n};\nexport const KeycloakSelect = ({\n variant = SelectVariant.single,\n ...rest\n}: KeycloakSelectProps) => {\n if (variant === SelectVariant.single) {\n return <SingleSelect {...rest} />;\n } else {\n return <TypeaheadSelect {...rest} variant={variant} />;\n }\n};\n","import { SelectOption } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, ControllerRenderProps } from \"react-hook-form\";\nimport { KeycloakSelect, SelectVariant } from \"../select/KeycloakSelect\";\nimport {\n OptionLabel,\n Options,\n UserProfileFieldProps,\n} from \"./UserProfileFields\";\nimport { UserProfileGroup } from \"./UserProfileGroup\";\nimport { UserFormFields, fieldName, label } from \"./utils\";\n\nexport const SelectComponent = (props: UserProfileFieldProps) => {\n const { t, form, inputType, attribute } = props;\n const [open, setOpen] = useState(false);\n const [filter, setFilter] = useState(\"\");\n const isMultiValue = inputType === \"multiselect\";\n\n const setValue = (\n value: string,\n field: ControllerRenderProps<UserFormFields>,\n ) => {\n if (isMultiValue) {\n if (field.value?.includes(value)) {\n field.onChange(field.value.filter((item: string) => item !== value));\n } else {\n if (Array.isArray(field.value)) {\n field.onChange([...field.value, value]);\n } else {\n field.onChange([value]);\n }\n }\n } else {\n field.onChange(value === field.value ? \"\" : value);\n }\n };\n\n const options =\n (attribute.validators?.options as Options | undefined)?.options || [];\n\n const optionLabel =\n (attribute.annotations?.[\"inputOptionLabels\"] as OptionLabel) || {};\n const prefix = attribute.annotations?.[\n \"inputOptionLabelsI18nPrefix\"\n ] as string;\n\n const fetchLabel = (option: string) =>\n label(props.t, optionLabel[option], option, prefix);\n\n const convertOptions = (selected: string) =>\n options\n .filter((o) =>\n fetchLabel(o)!.toLowerCase().includes(filter.toLowerCase()),\n )\n .map((option) => (\n <SelectOption\n selected={selected === option}\n key={option}\n value={option}\n >\n {fetchLabel(option)}\n </SelectOption>\n ));\n\n return (\n <UserProfileGroup {...props}>\n <Controller\n name={fieldName(attribute.name)}\n defaultValue={attribute.defaultValue}\n control={form.control}\n render={({ field }) => (\n <KeycloakSelect\n toggleId={attribute.name}\n onToggle={(b) => setOpen(b)}\n onClear={() => setValue(\"\", field)}\n onSelect={(value) => {\n const option = value.toString();\n setValue(option, field);\n if (!Array.isArray(field.value)) {\n setOpen(false);\n }\n }}\n selections={\n isMultiValue && Array.isArray(field.value)\n ? field.value.map((option) => fetchLabel(option))\n : fetchLabel(field.value)\n }\n variant={\n isMultiValue\n ? SelectVariant.typeaheadMulti\n : options.length >= 10\n ? SelectVariant.typeahead\n : SelectVariant.single\n }\n aria-label={t(\"selectOne\")}\n isOpen={open}\n isDisabled={attribute.readOnly}\n onFilter={(value) => {\n setFilter(value);\n return convertOptions(field.value);\n }}\n >\n {convertOptions(field.value)}\n </KeycloakSelect>\n )}\n />\n </UserProfileGroup>\n );\n};\n","import { KeycloakTextArea } from \"../controls/keycloak-text-area/KeycloakTextArea\";\nimport { UserProfileFieldProps } from \"./UserProfileFields\";\nimport { UserProfileGroup } from \"./UserProfileGroup\";\nimport { fieldName, isRequiredAttribute } from \"./utils\";\n\nexport const TextAreaComponent = (props: UserProfileFieldProps) => {\n const { form, attribute } = props;\n const isRequired = isRequiredAttribute(attribute);\n\n return (\n <UserProfileGroup {...props}>\n <KeycloakTextArea\n id={attribute.name}\n data-testid={attribute.name}\n {...form.register(fieldName(attribute.name))}\n cols={attribute.annotations?.[\"inputTypeCols\"] as number}\n rows={attribute.annotations?.[\"inputTypeRows\"] as number}\n readOnly={attribute.readOnly}\n isRequired={isRequired}\n defaultValue={attribute.defaultValue}\n />\n </UserProfileGroup>\n );\n};\n","import { TextInput, TextInputTypes } from \"@patternfly/react-core\";\n\nimport { UserProfileFieldProps } from \"./UserProfileFields\";\nimport { UserProfileGroup } from \"./UserProfileGroup\";\nimport { fieldName, isRequiredAttribute, label } from \"./utils\";\n\nexport const TextComponent = (props: UserProfileFieldProps) => {\n const { form, inputType, attribute } = props;\n const isRequired = isRequiredAttribute(attribute);\n const type = inputType.startsWith(\"html\")\n ? (inputType.substring(\"html\".length + 2) as TextInputTypes)\n : \"text\";\n\n return (\n <UserProfileGroup {...props}>\n <TextInput\n id={attribute.name}\n data-testid={attribute.name}\n type={type}\n placeholder={\n attribute.readOnly\n ? \"\"\n : label(\n props.t,\n attribute.annotations?.[\"inputTypePlaceholder\"] as string,\n \"\",\n attribute.annotations?.[\n \"inputOptionLabelsI18nPrefix\"\n ] as string,\n )\n }\n isDisabled={attribute.readOnly}\n isRequired={isRequired}\n defaultValue={attribute.defaultValue}\n {...form.register(fieldName(attribute.name))}\n />\n </UserProfileGroup>\n );\n};\n","import {\n UserProfileAttributeGroupMetadata,\n UserProfileAttributeMetadata,\n UserProfileMetadata,\n} from \"@keycloak/keycloak-admin-client/lib/defs/userProfileMetadata\";\nimport { Text } from \"@patternfly/react-core\";\nimport { TFunction } from \"i18next\";\nimport { ReactNode, useMemo, type JSX } from \"react\";\nimport { FieldPath, UseFormReturn } from \"react-hook-form\";\n\nimport { ScrollForm } from \"../main\";\nimport { LocaleSelector } from \"./LocaleSelector\";\nimport { MultiInputComponent } from \"./MultiInputComponent\";\nimport { OptionComponent } from \"./OptionsComponent\";\nimport { SelectComponent } from \"./SelectComponent\";\nimport { TextAreaComponent } from \"./TextAreaComponent\";\nimport { TextComponent } from \"./TextComponent\";\nimport { UserFormFields, fieldName, isRootAttribute, label } from \"./utils\";\n\nexport type UserProfileError = {\n responseData: { errors?: { errorMessage: string }[] };\n};\n\nexport type Options = {\n options?: string[];\n};\n\nexport type InputType =\n | \"text\"\n | \"textarea\"\n | \"select\"\n | \"select-radiobuttons\"\n | \"multiselect\"\n | \"multiselect-checkboxes\"\n | \"html5-email\"\n | \"html5-tel\"\n | \"html5-url\"\n | \"html5-number\"\n | \"html5-range\"\n | \"html5-datetime-local\"\n | \"html5-date\"\n | \"html5-month\"\n | \"html5-time\"\n | \"multi-input\";\n\nexport type UserProfileFieldProps = {\n t: TFunction;\n form: UseFormReturn<UserFormFields>;\n inputType: InputType;\n attribute: UserProfileAttributeMetadata;\n renderer?: (attribute: UserProfileAttributeMetadata) => ReactNode;\n};\n\nexport type OptionLabel = Record<string, string> | undefined;\n\nexport const FIELDS: {\n [type in InputType]: (props: UserProfileFieldProps) => JSX.Element;\n} = {\n text: TextComponent,\n textarea: TextAreaComponent,\n select: SelectComponent,\n \"select-radiobuttons\": OptionComponent,\n multiselect: SelectComponent,\n \"multiselect-checkboxes\": OptionComponent,\n \"html5-email\": TextComponent,\n \"html5-tel\": TextComponent,\n \"html5-url\": TextComponent,\n \"html5-number\": TextComponent,\n \"html5-range\": TextComponent,\n \"html5-datetime-local\": TextComponent,\n \"html5-date\": TextComponent,\n \"html5-month\": TextComponent,\n \"html5-time\": TextComponent,\n \"multi-input\": MultiInputComponent,\n} as const;\n\nexport type UserProfileFieldsProps = {\n t: TFunction;\n form: UseFormReturn<UserFormFields>;\n userProfileMetadata: UserProfileMetadata;\n supportedLocales: string[];\n currentLocale: string;\n hideReadOnly?: boolean;\n renderer?: (\n attribute: UserProfileAttributeMetadata,\n ) => JSX.Element | undefined;\n};\n\ntype GroupWithAttributes = {\n group: UserProfileAttributeGroupMetadata;\n attributes: UserProfileAttributeMetadata[];\n};\n\nexport const UserProfileFields = ({\n t,\n form,\n userProfileMetadata,\n supportedLocales,\n currentLocale,\n hideReadOnly = false,\n renderer,\n}: UserProfileFieldsProps) => {\n // Group attributes by group, for easier rendering.\n const groupsWithAttributes = useMemo(() => {\n // If there are no attributes, there is no need to group them.\n if (!userProfileMetadata.attributes) {\n return [];\n }\n\n // Hide read-only attributes if 'hideReadOnly' is enabled.\n const attributes = hideReadOnly\n ? userProfileMetadata.attributes.filter(({ readOnly }) => !readOnly)\n : userProfileMetadata.attributes;\n\n return [\n // Insert an empty group for attributes without a group.\n { name: undefined },\n ...(userProfileMetadata.groups ?? []),\n ].map<GroupWithAttributes>((group) => ({\n group,\n attributes: attributes.filter(\n (attribute) => attribute.group === group.name,\n ),\n }));\n }, [\n hideReadOnly,\n userProfileMetadata.groups,\n userProfileMetadata.attributes,\n ]);\n\n if (groupsWithAttributes.length === 0) {\n return null;\n }\n\n return (\n <ScrollForm\n label={t(\"jumpToSection\")}\n sections={groupsWithAttributes\n .filter((group) => group.attributes.length > 0)\n .map(({ group, attributes }) => ({\n title: label(t, group.displayHeader, group.name) || t(\"general\"),\n panel: (\n <div className=\"pf-v5-c-form\">\n {group.displayDescription && (\n <Text className=\"pf-v5-u-pb-lg\">\n {label(t, group.displayDescription, \"\")}\n </Text>\n )}\n {attributes.map((attribute) => (\n <FormField\n key={attribute.name}\n t={t}\n form={form}\n supportedLocales={supportedLocales}\n currentLocale={currentLocale}\n renderer={renderer}\n attribute={attribute}\n />\n ))}\n </div>\n ),\n }))}\n />\n );\n};\n\ntype FormFieldProps = {\n t: TFunction;\n form: UseFormReturn<UserFormFields>;\n supportedLocales: string[];\n currentLocale: string;\n attribute: UserProfileAttributeMetadata;\n renderer?: (\n attribute: UserProfileAttributeMetadata,\n ) => JSX.Element | undefined;\n};\n\nconst FormField = ({\n t,\n form,\n renderer,\n supportedLocales,\n currentLocale,\n attribute,\n}: FormFieldProps) => {\n const value = form.watch(\n fieldName(attribute.name) as FieldPath<UserFormFields>,\n );\n const inputType = useMemo(() => determineInputType(attribute), [attribute]);\n\n const Component =\n attribute.multivalued ||\n (isMultiValue(value) && attribute.annotations?.inputType === undefined)\n ? FIELDS[\"multi-input\"]\n : FIELDS[inputType];\n\n if (attribute.name === \"locale\")\n return (\n <LocaleSelector\n form={form}\n supportedLocales={supportedLocales}\n currentLocale={currentLocale}\n t={t}\n attribute={attribute}\n />\n );\n return (\n <Component\n t={t}\n form={form}\n inputType={inputType}\n attribute={attribute}\n renderer={renderer}\n />\n );\n};\n\nconst DEFAULT_INPUT_TYPE = \"text\" satisfies InputType;\n\nfunction determineInputType(\n attribute: UserProfileAttributeMetadata,\n): InputType {\n // Always treat the root attributes as a text field.\n if (isRootAttribute(attribute.name)) {\n return \"text\";\n }\n\n const inputType = attribute.annotations?.inputType;\n\n // if we have an valid input type use that to render\n if (isValidInputType(inputType)) {\n return inputType;\n }\n\n // In all other cases use the default\n return DEFAULT_INPUT_TYPE;\n}\n\nconst isValidInputType = (value: unknown): value is InputType =>\n typeof value === \"string\" && value in FIELDS;\n\nconst isMultiValue = (value: unknown): boolean =>\n Array.isArray(value) && value.length > 1;\n","import styles from \"@patternfly/react-styles/css/components/Avatar/avatar\";\nimport { css } from \"@patternfly/react-styles\";\n\ntype DefaultAvatarProps = {\n className?: string;\n border?: \"light\" | \"dark\";\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n};\n\nexport const DefaultAvatar = ({\n className = \"\",\n border,\n size = \"md\",\n}: DefaultAvatarProps) => (\n <svg\n className={css(\n styles.avatar,\n styles.modifiers[size],\n border === \"light\" && styles.modifiers.light,\n border === \"dark\" && styles.modifiers.dark,\n className,\n )}\n enableBackground=\"new 0 0 36 36\"\n version=\"1.1\"\n viewBox=\"0 0 36 36\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n style={{ fillRule: \"evenodd\", clipRule: \"evenodd\", fill: \"#FFFFFF\" }}\n cx=\"18\"\n cy=\"18.5\"\n r=\"18\"\n />\n <defs>\n <filter\n id=\"b\"\n x=\"5.2\"\n y=\"7.2\"\n width=\"25.6\"\n height=\"53.6\"\n filterUnits=\"userSpaceOnUse\"\n >\n <feColorMatrix values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0\" />\n </filter>\n </defs>\n <mask\n id=\"a\"\n x=\"5.2\"\n y=\"7.2\"\n width=\"25.6\"\n height=\"53.6\"\n maskUnits=\"userSpaceOnUse\"\n >\n <g style={{ filter: 'url(\"#b\")' }}>\n <circle\n style={{ fillRule: \"evenodd\", clipRule: \"evenodd\", fill: \"#FFFFFF\" }}\n cx=\"18\"\n cy=\"18.5\"\n r=\"18\"\n />\n </g>\n </mask>\n <g style={{ filter: 'url(\"#a\")' }}>\n <g transform=\"translate(5.04 6.88)\">\n <path\n style={{\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n fill: \"#BBBBBB\",\n }}\n d=\"m22.6 18.1c-1.1-1.4-2.3-2.2-3.5-2.6s-1.8-0.6-6.3-0.6-6.1 0.7-6.1 0.7 0 0 0 0c-1.2 0.4-2.4 1.2-3.4 2.6-2.3 2.8-3.2 12.3-3.2 14.8 0 3.2 0.4 12.3 0.6 15.4 0 0-0.4 5.5 4 5.5l-0.3-6.3-0.4-3.5 0.2-0.9c0.9 0.4 3.6 1.2 8.6 1.2 5.3 0 8-0.9 8.8-1.3l0.2 1-0.2 3.6-0.3 6.3c3 0.1 3.7-3 3.8-4.4s0.6-12.6 0.6-16.5c0.1-2.6-0.8-12.1-3.1-15z\"\n />\n <path\n style={{\n opacity: 0.1,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n }}\n d=\"m22.5 26c-0.1-2.1-1.5-2.8-4.8-2.8l2.2 9.6s1.8-1.7 3-1.8c0 0-0.4-4.6-0.4-5z\"\n />\n <path\n style={{\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n fill: \"#BBBBBB\",\n }}\n d=\"m12.7 13.2c-3.5 0-6.4-2.9-6.4-6.4s2.9-6.4 6.4-6.4 6.4 2.9 6.4 6.4-2.8 6.4-6.4 6.4z\"\n />\n <path\n style={{\n opacity: 8.0e-2,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n fill: \"#231F20\",\n }}\n d=\"m9.4 6.8c0-3 2.1-5.5 4.9-6.3-0.5-0.1-1-0.2-1.6-0.2-3.5 0-6.4 2.9-6.4 6.4s2.9 6.4 6.4 6.4c0.6 0 1.1-0.1 1.6-0.2-2.8-0.6-4.9-3.1-4.9-6.1z\"\n />\n <path\n style={{\n opacity: 0.1,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n }}\n d=\"m8.3 22.4c-2 0.4-2.9 1.4-3.1 3.5l-0.6 18.6s1.7 0.7 3.6 0.9l0.1-23z\"\n />\n </g>\n </g>\n </svg>\n);\n","import {\n Dropdown,\n DropdownList,\n DropdownProps,\n MenuToggle,\n} from \"@patternfly/react-core\";\nimport { EllipsisVIcon } from \"@patternfly/react-icons\";\nimport { ReactNode, useState } from \"react\";\n\ntype KeycloakDropdownProps = Omit<DropdownProps, \"toggle\"> & {\n \"data-testid\"?: string;\n isKebab?: boolean;\n title?: ReactNode;\n dropDownItems: ReactNode[];\n};\n\nexport const KeycloakDropdown = ({\n isKebab = false,\n title,\n dropDownItems,\n ...rest\n}: KeycloakDropdownProps) => {\n const [open, setOpen] = useState(false);\n\n return (\n <Dropdown\n {...rest}\n popperProps={{\n position: \"right\",\n }}\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid={`${rest[\"data-testid\"]}-toggle`}\n ref={ref}\n onClick={() => setOpen(!open)}\n isExpanded={open}\n variant={isKebab ? \"plain\" : \"default\"}\n >\n {isKebab ? <EllipsisVIcon /> : title}\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>{dropDownItems}</DropdownList>\n </Dropdown>\n );\n};\n","import {\n Avatar,\n AvatarProps,\n DropdownItem,\n Masthead,\n MastheadBrand,\n MastheadBrandProps,\n MastheadContent,\n MastheadMainProps,\n MastheadToggle,\n PageToggleButton,\n Toolbar,\n ToolbarContent,\n ToolbarItem,\n} from \"@patternfly/react-core\";\nimport { BarsIcon } from \"@patternfly/react-icons\";\nimport { TFunction } from \"i18next\";\nimport Keycloak, { type KeycloakTokenParsed } from \"keycloak-js\";\nimport { ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { DefaultAvatar } from \"./DefaultAvatar\";\nimport { KeycloakDropdown } from \"./KeycloakDropdown\";\n\nfunction loggedInUserName(\n token: KeycloakTokenParsed | undefined,\n t: TFunction,\n) {\n if (!token) {\n return t(\"unknownUser\");\n }\n\n const givenName = token.given_name;\n const familyName = token.family_name;\n const preferredUsername = token.preferred_username;\n\n if (givenName && familyName) {\n return t(\"fullName\", { givenName, familyName });\n }\n\n return givenName || familyName || preferredUsername || t(\"unknownUser\");\n}\n\ntype BrandLogo = MastheadBrandProps;\n\ntype KeycloakMastheadProps = MastheadMainProps & {\n keycloak: Keycloak;\n brand: BrandLogo;\n avatar?: AvatarProps;\n features?: {\n hasLogout?: boolean;\n hasManageAccount?: boolean;\n hasUsername?: boolean;\n };\n kebabDropdownItems?: ReactNode[];\n dropdownItems?: ReactNode[];\n toolbarItems?: ReactNode[];\n toolbar?: ReactNode;\n};\n\nconst KeycloakMasthead = ({\n keycloak,\n brand: { src, alt, className, ...brandProps },\n avatar,\n features: {\n hasLogout = true,\n hasManageAccount = true,\n hasUsername = true,\n } = {},\n kebabDropdownItems,\n dropdownItems = [],\n toolbarItems,\n toolbar,\n ...rest\n}: KeycloakMastheadProps) => {\n const { t } = useTranslation();\n const extraItems = [];\n if (hasManageAccount) {\n extraItems.push(\n <DropdownItem\n key=\"manageAccount\"\n onClick={() => keycloak.accountManagement()}\n >\n {t(\"manageAccount\")}\n </DropdownItem>,\n );\n }\n if (hasLogout) {\n extraItems.push(\n <DropdownItem key=\"signOut\" onClick={() => keycloak.logout()}>\n {t(\"signOut\")}\n </DropdownItem>,\n );\n }\n\n const picture = keycloak.idTokenParsed?.picture;\n return (\n <Masthead {...rest}>\n <MastheadToggle>\n <PageToggleButton variant=\"plain\" aria-label={t(\"navigation\")}>\n <BarsIcon />\n </PageToggleButton>\n </MastheadToggle>\n <MastheadBrand {...brandProps}>\n <img src={src} alt={alt} className={className} />\n </MastheadBrand>\n <MastheadContent>\n {toolbar}\n <Toolbar>\n <ToolbarContent>\n {toolbarItems?.map((item, index) => (\n <ToolbarItem key={index} align={{ default: \"alignRight\" }}>\n {item}\n </ToolbarItem>\n ))}\n <ToolbarItem\n visibility={{\n default: \"hidden\",\n md: \"visible\",\n }} /** this user dropdown is hidden on mobile sizes */\n >\n <KeycloakDropdown\n data-testid=\"options\"\n dropDownItems={[...dropdownItems, extraItems]}\n title={\n hasUsername\n ? loggedInUserName(keycloak.idTokenParsed, t)\n : undefined\n }\n />\n </ToolbarItem>\n <ToolbarItem\n align={{ default: \"alignLeft\" }}\n visibility={{\n md: \"hidden\",\n }}\n >\n <KeycloakDropdown\n data-testid=\"options-kebab\"\n isKebab\n dropDownItems={[\n ...(kebabDropdownItems || dropdownItems),\n extraItems,\n ]}\n />\n </ToolbarItem>\n <ToolbarItem\n variant=\"overflow-menu\"\n align={{ default: \"alignRight\" }}\n className=\"pf-v5-u-m-0-on-lg\"\n >\n {picture || avatar?.src ? (\n <Avatar {...{ src: picture, alt: t(\"avatar\"), ...avatar }} />\n ) : (\n <DefaultAvatar {...avatar} />\n )}\n </ToolbarItem>\n </ToolbarContent>\n </Toolbar>\n </MastheadContent>\n </Masthead>\n );\n};\n\nexport default KeycloakMasthead;\n","import {\n Component,\n type ComponentType,\n type FunctionComponent,\n type GetDerivedStateFromError,\n type ReactNode,\n} from \"react\";\nimport { createNamedContext } from \"./createNamedContext\";\nimport { useRequiredContext } from \"./useRequiredContext\";\n\nexport interface ErrorBoundaryContextValue {\n error?: Error;\n showBoundary: (error?: Error) => void;\n}\n\nconst ErrorBoundaryContext = createNamedContext<\n ErrorBoundaryContextValue | undefined\n>(\"ErrorBoundaryContext\", undefined);\n\nexport const useErrorBoundary = () => useRequiredContext(ErrorBoundaryContext);\n\nexport interface ErrorBoundaryProviderProps {\n children: ReactNode;\n}\n\nexport interface ErrorBoundaryProviderState {\n error?: Error;\n}\n\nexport class ErrorBoundaryProvider extends Component<\n ErrorBoundaryProviderProps,\n ErrorBoundaryProviderState\n> {\n state: ErrorBoundaryProviderState = {};\n\n static getDerivedStateFromError: GetDerivedStateFromError<\n ErrorBoundaryProviderProps,\n ErrorBoundaryProviderState\n > = (error) => {\n return { error };\n };\n\n showBoundary = (error?: Error) => {\n this.setState({ error });\n };\n\n render() {\n return (\n <ErrorBoundaryContext.Provider\n value={{ error: this.state.error, showBoundary: this.showBoundary }}\n >\n {this.props.children}\n </ErrorBoundaryContext.Provider>\n );\n }\n}\n\nexport interface FallbackProps {\n error: Error;\n}\n\nexport interface ErrorBoundaryFallbackProps {\n fallback: ComponentType<FallbackProps>;\n children: ReactNode;\n}\n\nexport const ErrorBoundaryFallback: FunctionComponent<\n ErrorBoundaryFallbackProps\n> = ({ children, fallback: FallbackComponent }) => {\n const { error } = useErrorBoundary();\n\n if (error) {\n return <FallbackComponent error={error} />;\n }\n\n return children;\n};\n","import { DependencyList, useEffect } from \"react\";\nimport { useErrorBoundary } from \"./ErrorBoundary\";\n\n/**\n * Util function to only set the state when the component is still mounted.\n *\n * It takes 2 functions one you do your adminClient call in and the other to set your state\n *\n * @example\n * useFetch(\n * () => adminClient.components.findOne({ id }),\n * (component) => setupForm(component),\n * []\n * );\n *\n * @param adminClientCall use this to do your adminClient call\n * @param callback when the data is fetched this is where you set your state\n */\nexport function useFetch<T>(\n adminClientCall: () => Promise<T>,\n callback: (param: T) => void,\n deps?: DependencyList,\n) {\n const { showBoundary } = useErrorBoundary();\n\n useEffect(() => {\n const controller = new AbortController();\n const { signal } = controller;\n adminClientCall()\n .then((result) => {\n if (!signal.aborted) {\n callback(result);\n }\n })\n .catch((error) => {\n console.error(error);\n if (!signal.aborted) {\n showBoundary(error);\n }\n });\n\n return () => controller.abort();\n }, deps);\n}\n","import { Bullseye, Spinner } from \"@patternfly/react-core\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const KeycloakSpinner = () => {\n const { t } = useTranslation();\n\n return (\n <Bullseye>\n <Spinner aria-label={t(\"spinnerLoading\")} />\n </Bullseye>\n );\n};\n","import {\n ComponentClass,\n MouseEventHandler,\n PropsWithChildren,\n ReactNode,\n} from \"react\";\nimport {\n EmptyState,\n EmptyStateIcon,\n EmptyStateBody,\n Button,\n ButtonVariant,\n EmptyStateActions,\n EmptyStateHeader,\n EmptyStateFooter,\n} from \"@patternfly/react-core\";\nimport type { SVGIconProps } from \"@patternfly/react-icons/dist/js/createIcon\";\nimport { PlusCircleIcon, SearchIcon } from \"@patternfly/react-icons\";\n\nexport type Action = {\n text: string;\n type?: ButtonVariant;\n onClick: MouseEventHandler<HTMLButtonElement>;\n};\n\nexport type ListEmptyStateProps = {\n message: string;\n instructions: ReactNode;\n primaryActionText?: string;\n onPrimaryAction?: MouseEventHandler<HTMLButtonElement>;\n hasIcon?: boolean;\n icon?: ComponentClass<SVGIconProps>;\n isSearchVariant?: boolean;\n secondaryActions?: Action[];\n isDisabled?: boolean;\n};\n\nexport const ListEmptyState = ({\n message,\n instructions,\n onPrimaryAction,\n hasIcon = true,\n isSearchVariant,\n primaryActionText,\n secondaryActions,\n icon,\n isDisabled = false,\n children,\n}: PropsWithChildren<ListEmptyStateProps>) => {\n return (\n <EmptyState data-testid=\"empty-state\" variant=\"lg\">\n {hasIcon && isSearchVariant ? (\n <EmptyStateIcon icon={SearchIcon} />\n ) : (\n hasIcon && <EmptyStateIcon icon={icon ? icon : PlusCircleIcon} />\n )}\n <EmptyStateHeader titleText={message} headingLevel=\"h1\" />\n <EmptyStateBody>{instructions}</EmptyStateBody>\n <EmptyStateFooter>\n {primaryActionText && (\n <Button\n data-testid={`${message\n .replace(/\\W+/g, \"-\")\n .toLowerCase()}-empty-action`}\n variant=\"primary\"\n onClick={onPrimaryAction}\n isDisabled={isDisabled}\n >\n {primaryActionText}\n </Button>\n )}\n {children}\n {secondaryActions && (\n <EmptyStateActions>\n {secondaryActions.map((action) => (\n <Button\n key={action.text}\n data-testid={`${action.text\n .replace(/\\W+/g, \"-\")\n .toLowerCase()}-empty-action`}\n variant={action.type || ButtonVariant.secondary}\n onClick={action.onClick}\n isDisabled={isDisabled}\n >\n {action.text}\n </Button>\n ))}\n </EmptyStateActions>\n )}\n </EmptyStateFooter>\n </EmptyState>\n );\n};\n","import {\n Divider,\n InputGroup,\n SearchInput,\n Toolbar,\n ToolbarContent,\n ToolbarItem,\n} from \"@patternfly/react-core\";\nimport { KeyboardEvent, PropsWithChildren, ReactNode, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ntype TableToolbarProps = {\n toolbarItem?: ReactNode;\n subToolbar?: ReactNode;\n toolbarItemFooter?: ReactNode;\n searchTypeComponent?: ReactNode;\n inputGroupName?: string;\n inputGroupPlaceholder?: string;\n inputGroupOnEnter?: (value: string) => void;\n};\n\nexport const TableToolbar = ({\n toolbarItem,\n subToolbar,\n toolbarItemFooter,\n children,\n searchTypeComponent,\n inputGroupName,\n inputGroupPlaceholder,\n inputGroupOnEnter,\n}: PropsWithChildren<TableToolbarProps>) => {\n const { t } = useTranslation();\n const [searchValue, setSearchValue] = useState<string>(\"\");\n\n const onSearch = (searchValue: string) => {\n setSearchValue(searchValue.trim());\n inputGroupOnEnter?.(searchValue.trim());\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n onSearch(searchValue);\n }\n };\n\n return (\n <>\n <Toolbar data-testid=\"table-toolbar\">\n <ToolbarContent>\n {inputGroupName && (\n <ToolbarItem>\n <InputGroup data-testid={inputGroupName}>\n {searchTypeComponent}\n {inputGroupPlaceholder && (\n <SearchInput\n data-testid=\"table-search-input\"\n placeholder={inputGroupPlaceholder}\n aria-label={t(\"search\")}\n value={searchValue}\n onChange={(_, value) => {\n setSearchValue(value);\n }}\n onSearch={() => onSearch(searchValue)}\n onKeyDown={handleKeyDown}\n onClear={() => onSearch(\"\")}\n />\n )}\n </InputGroup>\n </ToolbarItem>\n )}\n {toolbarItem}\n </ToolbarContent>\n </Toolbar>\n {subToolbar && (\n <Toolbar>\n <ToolbarContent>{subToolbar}</ToolbarContent>\n </Toolbar>\n )}\n <Divider />\n {children}\n <Toolbar>{toolbarItemFooter}</Toolbar>\n </>\n );\n};\n","import {\n Pagination,\n PaginationToggleTemplateProps,\n ToolbarItem,\n} from \"@patternfly/react-core\";\nimport { PropsWithChildren, ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { TableToolbar } from \"./TableToolbar\";\n\ntype KeycloakPaginationProps = {\n id?: string;\n count: number;\n first: number;\n max: number;\n onNextClick: (page: number) => void;\n onPreviousClick: (page: number) => void;\n onPerPageSelect: (max: number, first: number) => void;\n variant?: \"top\" | \"bottom\";\n};\n\ntype TableToolbarProps = KeycloakPaginationProps & {\n searchTypeComponent?: ReactNode;\n toolbarItem?: ReactNode;\n subToolbar?: ReactNode;\n inputGroupName?: string;\n inputGroupPlaceholder?: string;\n inputGroupOnEnter?: (value: string) => void;\n};\n\nconst KeycloakPagination = ({\n id,\n variant = \"top\",\n count,\n first,\n max,\n onNextClick,\n onPreviousClick,\n onPerPageSelect,\n}: KeycloakPaginationProps) => {\n const { t } = useTranslation();\n const page = Math.round(first / max);\n return (\n <Pagination\n widgetId={id}\n titles={{\n paginationAriaLabel: `${t(\"pagination\")} ${variant} `,\n }}\n isCompact\n toggleTemplate={({\n firstIndex,\n lastIndex,\n }: PaginationToggleTemplateProps) => (\n <b>\n {firstIndex} - {lastIndex}\n </b>\n )}\n itemCount={count + page * max}\n page={page + 1}\n perPage={max}\n onNextClick={(_, p) => onNextClick((p - 1) * max)}\n onPreviousClick={(_, p) => onPreviousClick((p - 1) * max)}\n onPerPageSelect={(_, m, f) => onPerPageSelect(f - 1, m)}\n variant={variant}\n />\n );\n};\n\nexport const PaginatingTableToolbar = ({\n count,\n searchTypeComponent,\n toolbarItem,\n subToolbar,\n children,\n inputGroupName,\n inputGroupPlaceholder,\n inputGroupOnEnter,\n ...rest\n}: PropsWithChildren<TableToolbarProps>) => {\n return (\n <TableToolbar\n searchTypeComponent={searchTypeComponent}\n toolbarItem={\n <>\n {toolbarItem}\n <ToolbarItem variant=\"pagination\">\n <KeycloakPagination count={count} {...rest} />\n </ToolbarItem>\n </>\n }\n subToolbar={subToolbar}\n toolbarItemFooter={\n count !== 0 ? (\n <ToolbarItem variant=\"pagination\">\n <KeycloakPagination count={count} variant=\"bottom\" {...rest} />\n </ToolbarItem>\n ) : null\n }\n inputGroupName={inputGroupName}\n inputGroupPlaceholder={inputGroupPlaceholder}\n inputGroupOnEnter={inputGroupOnEnter}\n >\n {children}\n </TableToolbar>\n );\n};\n","import { Button, ButtonVariant, ToolbarItem } from \"@patternfly/react-core\";\nimport { SyncAltIcon } from \"@patternfly/react-icons\";\nimport type { SVGIconProps } from \"@patternfly/react-icons/dist/js/createIcon\";\nimport {\n ActionsColumn,\n ExpandableRowContent,\n IAction,\n IActions,\n IActionsResolver,\n IFormatter,\n IRow,\n IRowCell,\n ITransform,\n Table,\n TableProps,\n TableVariant,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n} from \"@patternfly/react-table\";\nimport { cloneDeep, get, intersectionBy } from \"lodash-es\";\nimport {\n ComponentClass,\n ReactNode,\n isValidElement,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type JSX,\n} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useFetch } from \"../../utils/useFetch\";\nimport { useStoredState } from \"../../utils/useStoredState\";\nimport { KeycloakSpinner } from \"../KeycloakSpinner\";\nimport { ListEmptyState } from \"./ListEmptyState\";\nimport { PaginatingTableToolbar } from \"./PaginatingTableToolbar\";\n\ntype TitleCell = { title: JSX.Element };\ntype Cell<T> = keyof T | JSX.Element | TitleCell;\n\ntype BaseRow<T> = {\n data: T;\n cells: Cell<T>[];\n};\n\ntype Row<T> = BaseRow<T> & {\n selected: boolean;\n isOpen?: boolean;\n disableSelection: boolean;\n disableActions: boolean;\n};\n\ntype SubRow<T> = BaseRow<T> & {\n parent: number;\n};\n\ntype DataTableProps<T> = {\n ariaLabelKey: string;\n columns: Field<T>[];\n rows: (Row<T> | SubRow<T>)[];\n actions?: IActions;\n actionResolver?: IActionsResolver;\n selected?: T[];\n onSelect?: (value: T[]) => void;\n onCollapse?: (isOpen: boolean, rowIndex: number) => void;\n canSelectAll: boolean;\n canSelect: boolean;\n isNotCompact?: boolean;\n isRadio?: boolean;\n};\n\ntype CellRendererProps = {\n row: IRow;\n index?: number;\n actions?: IActions;\n actionResolver?: IActionsResolver;\n};\n\nconst isRow = (c: ReactNode | IRowCell): c is IRowCell =>\n !!c && (c as IRowCell).title !== undefined;\n\nconst CellRenderer = ({\n row,\n index,\n actions,\n actionResolver,\n}: CellRendererProps) => {\n const items = actions || actionResolver?.(row, {});\n return (\n <>\n {row.cells!.map((c, i) => (\n <Td key={`cell-${i}`}>{(isRow(c) ? c.title : c) as ReactNode}</Td>\n ))}\n {items && items.length > 0 && !row.disableActions && (\n <Td isActionCell>\n <ActionsColumn items={items} extraData={{ rowIndex: index }} />\n </Td>\n )}\n </>\n );\n};\n\nconst ExpandableRowRenderer = ({ row }: CellRendererProps) =>\n row.cells!.map((c, i) => (\n <div key={`cell-${i}`}>{(isRow(c) ? c.title : c) as ReactNode}</div>\n ));\n\nfunction DataTable<T>({\n columns,\n rows,\n actions,\n actionResolver,\n ariaLabelKey,\n selected,\n onSelect,\n onCollapse,\n canSelectAll,\n canSelect,\n isNotCompact,\n isRadio,\n ...props\n}: DataTableProps<T>) {\n const { t } = useTranslation();\n const [selectedRows, setSelectedRows] = useState<T[]>(selected || []);\n const [expandedRows, setExpandedRows] = useState<boolean[]>([]);\n\n const rowsSelectedOnPage = useMemo(\n () =>\n intersectionBy(\n selectedRows,\n rows.map((row) => row.data),\n \"id\",\n ),\n [selectedRows, rows],\n );\n\n useEffect(() => {\n if (canSelectAll) {\n const selectAllCheckbox = document.getElementsByName(\"check-all\").item(0);\n if (selectAllCheckbox) {\n const checkbox = selectAllCheckbox as HTMLInputElement;\n checkbox.indeterminate =\n rowsSelectedOnPage.length < rows.length &&\n rowsSelectedOnPage.length > 0;\n }\n }\n }, [selectedRows, canSelectAll, rows]);\n\n const updateSelectedRows = (selected: T[]) => {\n setSelectedRows(selected);\n onSelect?.(selected);\n };\n\n const updateState = (rowIndex: number, isSelected: boolean) => {\n if (isRadio) {\n const selectedRow = isSelected ? [rows[rowIndex].data] : [];\n updateSelectedRows(selectedRow);\n } else {\n if (rowIndex === -1) {\n const rowsSelectedOnPageIds = rowsSelectedOnPage.map((v) =>\n get(v, \"id\"),\n );\n updateSelectedRows(\n isSelected\n ? [...selectedRows, ...rows.map((row) => row.data)]\n : selectedRows.filter(\n (v) => !rowsSelectedOnPageIds.includes(get(v, \"id\")),\n ),\n );\n } else {\n if (isSelected) {\n updateSelectedRows([...selectedRows, rows[rowIndex].data]);\n } else {\n updateSelectedRows(\n selectedRows.filter(\n (v) => get(v, \"id\") !== (rows[rowIndex] as IRow).data.id,\n ),\n );\n }\n }\n }\n };\n\n return (\n <Table\n {...props}\n variant={isNotCompact ? undefined : TableVariant.compact}\n aria-label={t(ariaLabelKey)}\n >\n <Thead>\n <Tr>\n {onCollapse && <Th screenReaderText={t(\"expandRow\")} />}\n {canSelectAll && (\n <Th\n screenReaderText={t(\"selectAll\")}\n select={\n !isRadio\n ? {\n onSelect: (_, isSelected) => {\n updateState(-1, isSelected);\n },\n isSelected: rowsSelectedOnPage.length === rows.length,\n }\n : undefined\n }\n />\n )}\n {columns.map((column) => (\n <Th\n screenReaderText={t(\"expandRow\")}\n key={column.displayKey || column.name}\n className={column.transforms?.[0]().className}\n >\n {t(column.displayKey || column.name)}\n </Th>\n ))}\n </Tr>\n </Thead>\n {!onCollapse ? (\n <Tbody>\n {(rows as IRow[]).map((row, index) => (\n <Tr key={index} isExpanded={expandedRows[index]}>\n {canSelect && (\n <Td\n select={{\n rowIndex: index,\n onSelect: (_, isSelected, rowIndex) => {\n updateState(rowIndex, isSelected);\n },\n isSelected: !!selectedRows.find(\n (v) => get(v, \"id\") === row.data.id,\n ),\n variant: isRadio ? \"radio\" : \"checkbox\",\n isDisabled: row.disableSelection,\n }}\n />\n )}\n <CellRenderer\n row={row}\n index={index}\n actions={actions}\n actionResolver={actionResolver}\n />\n </Tr>\n ))}\n </Tbody>\n ) : (\n (rows as IRow[]).map((row, index) => (\n <Tbody key={index}>\n {index % 2 === 0 ? (\n <Tr>\n <Td\n expand={\n rows[index + 1].cells.length === 0\n ? undefined\n : {\n isExpanded: expandedRows[index] ?? false,\n rowIndex: index,\n expandId: \"expandable-row-\",\n onToggle: (_, rowIndex, isOpen) => {\n onCollapse(isOpen, rowIndex);\n const expand = [...expandedRows];\n expand[index] = isOpen;\n setExpandedRows(expand);\n },\n }\n }\n />\n <CellRenderer\n row={row}\n index={index}\n actions={actions}\n actionResolver={actionResolver}\n />\n </Tr>\n ) : (\n <Tr isExpanded={expandedRows[index - 1] ?? false}>\n <Td />\n <Td colSpan={columns.length}>\n <ExpandableRowContent>\n <ExpandableRowRenderer row={row} />\n </ExpandableRowContent>\n </Td>\n </Tr>\n )}\n </Tbody>\n ))\n )}\n </Table>\n );\n}\n\nexport type Field<T> = {\n name: string;\n displayKey?: string;\n cellFormatters?: IFormatter[];\n transforms?: ITransform[];\n cellRenderer?: (row: T) => JSX.Element | string;\n};\n\nexport type DetailField<T> = {\n name: string;\n enabled?: (row: T) => boolean;\n cellRenderer?: (row: T) => JSX.Element | string;\n};\n\nexport type Action<T> = IAction & {\n onRowClick?: (row: T) => Promise<boolean | void> | void;\n};\n\nexport type LoaderFunction<T> = (\n first?: number,\n max?: number,\n search?: string,\n) => Promise<T[]>;\n\nexport type DataListProps<T> = Omit<\n TableProps,\n \"rows\" | \"cells\" | \"onSelect\"\n> & {\n loader: T[] | LoaderFunction<T>;\n onSelect?: (value: T[]) => void;\n canSelectAll?: boolean;\n detailColumns?: DetailField<T>[];\n isRowDisabled?: (value: T) => boolean;\n isPaginated?: boolean;\n ariaLabelKey: string;\n searchPlaceholderKey?: string;\n columns: Field<T>[];\n actions?: Action<T>[];\n actionResolver?: IActionsResolver;\n searchTypeComponent?: ReactNode;\n toolbarItem?: ReactNode;\n subToolbar?: ReactNode;\n emptyState?: ReactNode;\n icon?: ComponentClass<SVGIconProps>;\n isNotCompact?: boolean;\n isRadio?: boolean;\n isSearching?: boolean;\n};\n\n/**\n * A generic component that can be used to show the initial list most sections have. Takes care of the loading of the date and filtering.\n * All you have to define is how the columns are displayed.\n * @example\n * <KeycloakDataTable columns={[\n * {\n * name: \"clientId\", //name of the field from the array of object the loader returns to display in this column\n * displayKey: \"clientId\", //i18n key to use to lookup the name of the column header\n * cellRenderer: ClientDetailLink, //optionally you can use a component to render the column when you don't want just the content of the field, the whole row / entire object is passed in.\n * }\n * ]}\n * @param {DataListProps} props - The properties.\n * @param {string} props.ariaLabelKey - The aria label key i18n key to lookup the label\n * @param {string} props.searchPlaceholderKey - The i18n key to lookup the placeholder for the search box\n * @param {boolean} props.isPaginated - if true, the loader will be called with first, max and search and a pager will be added in the header\n * @param {(first?: number, max?: number, search?: string) => Promise<T[]>} props.loader - loader function that will fetch the data to display first, max and search are only applicable when isPaginated = true\n * @param {Field<T>} props.columns - definition of the columns\n * @param {Field<T>} props.detailColumns - definition of the columns expandable columns\n * @param {Action[]} props.actions - the actions that appear on the row\n * @param {IActionsResolver} props.actionResolver Resolver for the given action\n * @param {ReactNode} props.toolbarItem - Toolbar items that appear on the top of the table {@link toolbarItem}\n * @param {ReactNode} props.emptyState - ReactNode show when the list is empty could be any component but best to use {@link ListEmptyState}\n */\nexport function KeycloakDataTable<T>({\n ariaLabelKey,\n searchPlaceholderKey,\n isPaginated = false,\n onSelect,\n canSelectAll = false,\n isNotCompact,\n isRadio,\n detailColumns,\n isRowDisabled,\n loader,\n columns,\n actions,\n actionResolver,\n searchTypeComponent,\n toolbarItem,\n subToolbar,\n emptyState,\n icon,\n isSearching = false,\n ...props\n}: DataListProps<T>) {\n const { t } = useTranslation();\n const [selected, setSelected] = useState<T[]>([]);\n const [rows, setRows] = useState<(Row<T> | SubRow<T>)[]>();\n const [unPaginatedData, setUnPaginatedData] = useState<T[]>();\n const [loading, setLoading] = useState(false);\n\n const [defaultPageSize, setDefaultPageSize] = useStoredState(\n localStorage,\n \"pageSize\",\n 10,\n );\n\n const [max, setMax] = useState(defaultPageSize);\n const [first, setFirst] = useState(0);\n const [search, setSearch] = useState<string>(\"\");\n const prevSearch = useRef<string>();\n\n const [key, setKey] = useState(0);\n const prevKey = useRef<number>();\n const refresh = () => setKey(key + 1);\n const id = useId();\n\n const renderCell = (columns: (Field<T> | DetailField<T>)[], value: T) => {\n return columns.map((col) => {\n if (\"cellFormatters\" in col) {\n const v = get(value, col.name);\n return col.cellFormatters?.reduce((s, f) => f(s), v);\n }\n if (col.cellRenderer) {\n const Component = col.cellRenderer;\n //@ts-ignore\n return { title: <Component {...value} /> };\n }\n return get(value, col.name);\n });\n };\n\n const convertToColumns = (data: T[]): (Row<T> | SubRow<T>)[] => {\n const isDetailColumnsEnabled = (value: T) =>\n detailColumns?.[0]?.enabled?.(value);\n return data\n .map((value, index) => {\n const disabledRow = isRowDisabled ? isRowDisabled(value) : false;\n const row: (Row<T> | SubRow<T>)[] = [\n {\n data: value,\n disableSelection: disabledRow,\n disableActions: disabledRow,\n selected: !!selected.find((v) => get(v, \"id\") === get(value, \"id\")),\n isOpen: isDetailColumnsEnabled(value) ? false : undefined,\n cells: renderCell(columns, value),\n },\n ];\n if (detailColumns) {\n row.push({\n parent: index * 2,\n cells: isDetailColumnsEnabled(value)\n ? renderCell(detailColumns!, value)\n : [],\n } as SubRow<T>);\n }\n return row;\n })\n .flat();\n };\n\n const getNodeText = (node: Cell<T>): string => {\n if ([\"string\", \"number\"].includes(typeof node)) {\n return node!.toString();\n }\n if (node instanceof Array) {\n return node.map(getNodeText).join(\"\");\n }\n if (typeof node === \"object\") {\n return getNodeText(\n isValidElement((node as TitleCell).title)\n ? (node as TitleCell).title.props\n : Object.values(node),\n );\n }\n return \"\";\n };\n\n const filteredData = useMemo<(Row<T> | SubRow<T>)[] | undefined>(\n () =>\n search === \"\" || isPaginated\n ? undefined\n : convertToColumns(unPaginatedData || [])\n .filter((row) =>\n row.cells.some(\n (cell) =>\n cell &&\n getNodeText(cell)\n .toLowerCase()\n .includes(search.toLowerCase()),\n ),\n )\n .slice(first, first + max + 1),\n [search, first, max],\n );\n\n useFetch(\n async () => {\n setLoading(true);\n const newSearch = prevSearch.current === \"\" && search !== \"\";\n\n if (newSearch) {\n setFirst(0);\n }\n prevSearch.current = search;\n return typeof loader === \"function\"\n ? key === prevKey.current && unPaginatedData\n ? unPaginatedData\n : await loader(newSearch ? 0 : first, max + 1, search)\n : loader;\n },\n (data) => {\n prevKey.current = key;\n if (!isPaginated) {\n setUnPaginatedData(data);\n if (data.length > first) {\n data = data.slice(first, first + max + 1);\n } else {\n setFirst(0);\n }\n }\n\n const result = convertToColumns(data);\n setRows(result);\n setLoading(false);\n },\n [\n key,\n first,\n max,\n search,\n typeof loader !== \"function\" ? loader : undefined,\n ],\n );\n\n const convertAction = () =>\n actions &&\n cloneDeep(actions).map((action: Action<T>, index: number) => {\n delete action.onRowClick;\n action.onClick = async (_, rowIndex) => {\n const result = await actions[index].onRowClick!(\n (filteredData || rows)![rowIndex].data,\n );\n if (result) {\n if (!isPaginated) {\n setSearch(\"\");\n }\n refresh();\n }\n };\n return action;\n });\n\n const onCollapse = (isOpen: boolean, rowIndex: number) => {\n (data![rowIndex] as Row<T>).isOpen = isOpen;\n setRows([...data!]);\n };\n\n const data = filteredData || rows;\n const noData = !data || data.length === 0;\n const searching = search !== \"\" || isSearching;\n // if we use detail columns there are twice the number of rows\n const maxRows = detailColumns ? max * 2 : max;\n const rowLength = detailColumns ? (data?.length || 0) / 2 : data?.length || 0;\n\n return (\n <>\n {(!noData || searching) && (\n <PaginatingTableToolbar\n id={id}\n count={rowLength}\n first={first}\n max={max}\n onNextClick={setFirst}\n onPreviousClick={setFirst}\n onPerPageSelect={(first, max) => {\n setFirst(first);\n setMax(max);\n setDefaultPageSize(max);\n }}\n inputGroupName={\n searchPlaceholderKey ? `${ariaLabelKey}input` : undefined\n }\n inputGroupOnEnter={setSearch}\n inputGroupPlaceholder={t(searchPlaceholderKey || \"\")}\n searchTypeComponent={searchTypeComponent}\n toolbarItem={\n <>\n {toolbarItem} <ToolbarItem variant=\"separator\" />{\" \"}\n <ToolbarItem>\n <Button variant=\"link\" onClick={refresh} data-testid=\"refresh\">\n <SyncAltIcon /> {t(\"refresh\")}\n </Button>\n </ToolbarItem>\n </>\n }\n subToolbar={subToolbar}\n >\n {!loading && !noData && (\n <DataTable\n {...props}\n canSelectAll={canSelectAll}\n canSelect={!!onSelect}\n selected={selected}\n onSelect={(selected) => {\n setSelected(selected);\n onSelect?.(selected);\n }}\n onCollapse={detailColumns ? onCollapse : undefined}\n actions={convertAction()}\n actionResolver={actionResolver}\n rows={data.slice(0, maxRows)}\n columns={columns}\n isNotCompact={isNotCompact}\n isRadio={isRadio}\n ariaLabelKey={ariaLabelKey}\n />\n )}\n {!loading && noData && searching && (\n <ListEmptyState\n hasIcon={true}\n icon={icon}\n isSearchVariant={true}\n message={t(\"noSearchResults\")}\n instructions={t(\"noSearchResultsInstructions\")}\n secondaryActions={\n !isSearching\n ? [\n {\n text: t(\"clearAllFilters\"),\n onClick: () => setSearch(\"\"),\n type: ButtonVariant.link,\n },\n ]\n : []\n }\n />\n )}\n </PaginatingTableToolbar>\n )}\n {loading && <KeycloakSpinner />}\n {!loading && noData && !searching && emptyState}\n </>\n );\n}\n","import OrganizationRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/organizationRepresentation\";\nimport { Badge, Chip, ChipGroup } from \"@patternfly/react-core\";\nimport { TableText } from \"@patternfly/react-table\";\nimport { FunctionComponent, PropsWithChildren, ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { Action, LoaderFunction } from \"./table/KeycloakDataTable\";\nimport { KeycloakDataTable } from \"./table/KeycloakDataTable\";\n\ntype OrgDetailLinkProps = {\n link: FunctionComponent<\n PropsWithChildren<{ organization: OrganizationRepresentation }>\n >;\n organization: OrganizationRepresentation;\n};\n\nconst OrgDetailLink = ({ link, organization }: OrgDetailLinkProps) => {\n const { t } = useTranslation();\n const Component = link;\n return (\n <TableText wrapModifier=\"truncate\">\n <Component organization={organization}>\n {organization.name}\n {!organization.enabled && (\n <Badge\n key={`${organization.id}-disabled`}\n isRead\n className=\"pf-v5-u-ml-sm\"\n >\n {t(\"disabled\")}\n </Badge>\n )}\n </Component>\n </TableText>\n );\n};\n\nconst Domains = (org: OrganizationRepresentation) => {\n const { t } = useTranslation();\n return (\n <ChipGroup\n numChips={2}\n expandedText={t(\"hide\")}\n collapsedText={t(\"showRemaining\")}\n >\n {org.domains?.map((dn) => {\n const name = typeof dn === \"string\" ? dn : dn.name;\n return (\n <Chip key={name} isReadOnly>\n {name}\n </Chip>\n );\n })}\n </ChipGroup>\n );\n};\n\nexport type OrganizationTableProps = PropsWithChildren & {\n loader:\n | LoaderFunction<OrganizationRepresentation>\n | OrganizationRepresentation[];\n link: FunctionComponent<\n PropsWithChildren<{ organization: OrganizationRepresentation }>\n >;\n toolbarItem?: ReactNode;\n isPaginated?: boolean;\n isSearching?: boolean;\n searchPlaceholderKey?: string;\n onSelect?: (orgs: OrganizationRepresentation[]) => void;\n onDelete?: (org: OrganizationRepresentation) => void;\n deleteLabel?: string;\n actions?: Action<OrganizationRepresentation>[];\n};\n\nexport const OrganizationTable = ({\n loader,\n toolbarItem,\n isPaginated = false,\n isSearching = false,\n searchPlaceholderKey,\n onSelect,\n onDelete,\n deleteLabel = \"delete\",\n link,\n children,\n actions,\n}: OrganizationTableProps) => {\n const { t } = useTranslation();\n\n return (\n <KeycloakDataTable\n loader={loader}\n isPaginated={isPaginated}\n isSearching={isSearching}\n ariaLabelKey=\"organizationList\"\n searchPlaceholderKey={searchPlaceholderKey}\n toolbarItem={toolbarItem}\n onSelect={onSelect}\n canSelectAll={onSelect !== undefined}\n actions={[\n ...(onDelete ? [{ title: t(deleteLabel), onRowClick: onDelete }] : []),\n ...(actions ?? []),\n ]}\n columns={[\n {\n name: \"name\",\n displayKey: \"name\",\n cellRenderer: (row) => (\n <OrgDetailLink link={link} organization={row} />\n ),\n },\n {\n name: \"domains\",\n displayKey: \"domains\",\n cellRenderer: Domains,\n },\n {\n name: \"description\",\n displayKey: \"description\",\n },\n {\n name: \"membershipType\",\n displayKey: \"membershipType\",\n },\n ]}\n emptyState={children}\n />\n );\n};\n"],"names":["createNamedContext","displayName","defaultValue","context","createContext","ERROR_FIELDS","ERROR_DESCRIPTION_FIELD","getErrorMessage","error","NetworkError","getNetworkErrorMessage","getErrorDescription","data","getNetworkErrorDescription","key","value","generateId","isDefined","useRequiredContext","resolved","useContext","useSetTimeout","didUnmountRef","useRef","scheduledTimersRef","useEffect","clearAll","timer","useCallback","callback","delay","handleCallback","AlertPanel","alerts","onCloseAlert","jsx","AlertGroup","id","variant","message","description","index","Alert","AlertVariant","AlertActionCloseButton","ALERT_TIMEOUT","AlertContext","useAlerts","AlertProvider","children","t","useTranslation","setTimeout","setAlerts","useState","removeAlert","alert","addAlert","addError","messageKey","useMemo","jsxs","ErrorPage","props","i18n","errorMessage","networkErrorMessage","onRetry","Page","Modal","ModalVariant","Button","TextContent","Text","useStorageItem","storageArea","keyName","setInnerValue","setValue","newValue","handleStorage","event","useStoredState","defaultValueSerialized","storedValue","setStoredValue","HelpContext","useHelp","Help","enabled","setHelp","toggleHelp","createKeycloakEnvContext","KeycloakEnvContext","useEnvironment","KeycloakProvider","environment","externalKeycloak","calledOnce","init","setInit","setError","keycloak","Keycloak","Spinner","getInjectedEnvironment","contents","ContinueCancelModal","modalTitle","continueLabel","cancelLabel","buttonTitle","isDisabled","buttonVariant","buttonTestRole","onContinue","component","rest","open","setOpen","Fragment","FormErrorText","FormHelperText","HelperText","HelperTextItem","ExclamationCircleIcon","HelpItem","helpText","fieldLabelId","noVerticalAlign","unWrap","isRecommendation","IconComponent","ExclamationTriangleIcon","HelpIcon","Popover","e","Icon","getRuleValue","rule","FormLabel","name","label","labelIcon","FormGroup","NumberControl","controller","control","errors","useFormContext","Controller","field","required","min","NumberInput","ValidatedOptions","PasswordInputBase","hasReveal","innerRef","hidePassword","setHidePassword","InputGroup","InputGroupItem","TextInput","EyeIcon","EyeSlashIcon","PasswordInput","forwardRef","ref","PasswordControl","fieldState","useController","SingleSelectControl","options","selectedOptions","isFullWidth","onSelect","get","onChange","Select","isSelectBasedOptions","o","MenuToggle","MenuToggleStatus","_event","v","option","convertedValue","SelectList","SelectOption","isString","getValue","TypeaheadSelectControl","placeholderText","onFilter","filterValue","setFilterValue","focusedItemIndex","setFocusedItemIndex","selectedOptionsState","setSelectedOptions","textInputRef","isTypeaheadMulti","SelectVariant","combinedOptions","filteredOptions","updateValue","item","onInputKeyDown","focusedItem","indexToFocus","TextInputGroup","TextInputGroupMain","_","ChipGroup","selection","Chip","ev","TextInputGroupUtilities","TimesIcon","SelectControl","isBundleKey","text","fallback","prefix","bundleKey","labelAttribute","attribute","ROOT_ATTRIBUTES","isRootAttribute","attr","fieldName","beerify","debeerify","setUserProfileServerError","params","p","isRequiredAttribute","isUserProfileError","responseData","isFieldError","SwitchControl","labelOn","stringify","defValue","Switch","checked","TextAreaControl","TextArea","TextControl","helperText","KeycloakTextArea","FileUploadControl","filename","setFilename","FileUpload","file","IconMapper","icon","SpecificIcon","getIcon","GithubIcon","FacebookSquareIcon","GitlabIcon","GoogleIcon","LinkedinIcon","OpenshiftIcon","StackOverflowIcon","TwitterIcon","MicrosoftIcon","BitbucketIcon","InstagramIcon","PaypalIcon","CubeIcon","FormTitle","title","headingLevel","size","Title","style","FormPanel","scrollId","className","useId","Card","CardHeader","CardTitle","CardBody","ScrollPanel","mainPageContentId","spacesToHyphens","string","ScrollForm","sections","borders","shownSections","isHidden","Grid","GridItem","panel","PageSection","JumpLinks","JumpLinksItem","element","isSubmittable","formState","allowNonDirty","allowInvalid","FormSubmitButton","localeToDisplayName","locale","LocaleSelector","form","supportedLocales","currentLocale","locales","a","b","FormProvider","UserProfileGroup","renderer","MultiInputComponent","MultiLineInput","inputType","addButtonLabel","register","useWatch","fields","remove","update","append","values","fieldValue","type","ButtonVariant","MinusCircleIcon","PlusCircleIcon","OptionComponent","isRequired","isMultiSelect","Component","Checkbox","Radio","optionLabel","SingleSelect","toggleId","onToggle","selections","isOpen","menuAppendTo","direction","width","maxHeight","toggleIcon","toggle","childArray","Children","propertyToString","c","TypeaheadSelect","validated","typeAheadAriaLabel","chipGroupComponent","chipGroupProps","footer","MenuFooter","prop","KeycloakSelect","SelectComponent","filter","setFilter","isMultiValue","fetchLabel","convertOptions","selected","TextAreaComponent","TextComponent","FIELDS","UserProfileFields","userProfileMetadata","hideReadOnly","groupsWithAttributes","attributes","readOnly","group","FormField","determineInputType","DEFAULT_INPUT_TYPE","isValidInputType","DefaultAvatar","border","css","styles","KeycloakDropdown","isKebab","dropDownItems","Dropdown","EllipsisVIcon","DropdownList","loggedInUserName","token","givenName","familyName","preferredUsername","KeycloakMasthead","src","alt","brandProps","avatar","hasLogout","hasManageAccount","hasUsername","kebabDropdownItems","dropdownItems","toolbarItems","toolbar","extraItems","DropdownItem","picture","Masthead","MastheadToggle","PageToggleButton","BarsIcon","MastheadBrand","MastheadContent","Toolbar","ToolbarContent","ToolbarItem","Avatar","ErrorBoundaryContext","useErrorBoundary","ErrorBoundaryProvider","ErrorBoundaryFallback","FallbackComponent","useFetch","adminClientCall","deps","showBoundary","signal","result","KeycloakSpinner","Bullseye","ListEmptyState","instructions","onPrimaryAction","hasIcon","isSearchVariant","primaryActionText","secondaryActions","EmptyState","EmptyStateIcon","SearchIcon","EmptyStateHeader","EmptyStateBody","EmptyStateFooter","EmptyStateActions","action","TableToolbar","toolbarItem","subToolbar","toolbarItemFooter","searchTypeComponent","inputGroupName","inputGroupPlaceholder","inputGroupOnEnter","searchValue","setSearchValue","onSearch","handleKeyDown","SearchInput","Divider","KeycloakPagination","count","first","max","onNextClick","onPreviousClick","onPerPageSelect","page","Pagination","firstIndex","lastIndex","m","f","PaginatingTableToolbar","isRow","CellRenderer","row","actions","actionResolver","items","i","Td","ActionsColumn","ExpandableRowRenderer","DataTable","columns","rows","ariaLabelKey","onCollapse","canSelectAll","canSelect","isNotCompact","isRadio","selectedRows","setSelectedRows","expandedRows","setExpandedRows","rowsSelectedOnPage","intersectionBy","selectAllCheckbox","checkbox","updateSelectedRows","updateState","rowIndex","isSelected","selectedRow","rowsSelectedOnPageIds","Table","TableVariant","Thead","Tr","Th","column","Tbody","expand","ExpandableRowContent","KeycloakDataTable","searchPlaceholderKey","isPaginated","detailColumns","isRowDisabled","loader","emptyState","isSearching","setSelected","setRows","unPaginatedData","setUnPaginatedData","loading","setLoading","defaultPageSize","setDefaultPageSize","setMax","setFirst","search","setSearch","prevSearch","setKey","prevKey","refresh","renderCell","col","s","convertToColumns","isDetailColumnsEnabled","disabledRow","getNodeText","node","isValidElement","filteredData","cell","newSearch","convertAction","cloneDeep","noData","searching","maxRows","rowLength","SyncAltIcon","OrgDetailLink","link","organization","TableText","Badge","Domains","org","dn","OrganizationTable","onDelete","deleteLabel"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keycloak/keycloak-ui-shared",
3
- "version": "26.5.7",
3
+ "version": "26.6.0",
4
4
  "type": "module",
5
5
  "main": "./dist/keycloak-ui-shared.js",
6
6
  "types": "./dist/keycloak-ui-shared.d.ts",
@@ -45,12 +45,12 @@
45
45
  "@patternfly/react-table": "^5.4.16",
46
46
  "i18next": "^25.7.3",
47
47
  "keycloak-js": "^26.2.2",
48
- "lodash-es": "^4.17.22",
48
+ "lodash-es": "^4.18.1",
49
49
  "react": "^18.3.1",
50
50
  "react-dom": "^18.3.1",
51
51
  "react-hook-form": "7.70.0",
52
52
  "react-i18next": "^16.5.1",
53
- "@keycloak/keycloak-admin-client": "26.5.7"
53
+ "@keycloak/keycloak-admin-client": "26.6.0"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/lodash-es": "^4.17.12",
@@ -62,7 +62,7 @@
62
62
  "vite-plugin-checker": "^0.12.0",
63
63
  "vite-plugin-dts": "^4.5.4",
64
64
  "vite-plugin-lib-inject-css": "^2.2.2",
65
- "vitest": "^3.2.4"
65
+ "vitest": "^4.0.16"
66
66
  },
67
67
  "author": {
68
68
  "name": "Red Hat, Inc.",