{"version":3,"file":"9595.d1353fa0c692f547e28a.js","mappings":"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","sources":["webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactApi/methods/getInstitutions.ts","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/Icons/icon-close2.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/hooks/useDebounce.ts","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/AsyncSelect/async-select.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/hooks/useOnClickOutside.ts","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Checkbox/checkbox.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/InputField/input-field.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/Icons/icon-location.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Tooltip/tooltip.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/UnicUserInfoCard/unic-user-info-card.tsx"],"sourcesContent":["import { endpoints } from \"ReactApi/endpoints\";\r\nimport { callServer } from \"ReactApi/serverService\";\r\nimport { IProfile } from \"ReactComponents/Navigation/navigation-types\";\r\n\r\nexport type Institution = IProfile[\"Institution\"];\r\n\r\nexport const getInstitutions = async (searchTerm: string): Promise<Institution[]> => {\r\n    try {\r\n        const response = await callServer<Institution[]>(\r\n            `${endpoints.getInstitutions}?input=${searchTerm}`,\r\n            \"GET\"\r\n        );\r\n        if (!response.Success) {\r\n            throw new Error(response.ErrorMessage);\r\n        }\r\n        return response.Payload;\r\n    } catch (error) {\r\n        return [];\r\n        // return [\r\n        //     \"Børnehuset i Veksø - Børnehuset De Fire Årstider\",\r\n        //     \"Gyldendal Uddannelse\",\r\n        //     \"Gyldendal Uddannelse 2\"\r\n        // ];\r\n    }\r\n};\r\n","import React from \"react\";\r\n\r\nconst IconClose = () => {\r\n    return (\r\n        <svg\r\n            width=\"16\"\r\n            height=\"16\"\r\n            viewBox=\"0 0 16 16\"\r\n            fill=\"none\"\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n            role=\"presentation\"\r\n        >\r\n            <path d=\"M1 1L15 15\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n            <path d=\"M1 15L15 1\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n        </svg>\r\n    );\r\n};\r\n\r\nexport default IconClose;\r\n","import { useEffect, useState } from \"react\";\r\n\r\nfunction useDebounce<T>(value: T, delay?: number): T {\r\n    const [debouncedValue, setDebouncedValue] = useState<T>(value);\r\n\r\n    useEffect(() => {\r\n        const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\r\n\r\n        return () => {\r\n            clearTimeout(timer);\r\n        };\r\n    }, [value, delay]);\r\n\r\n    return debouncedValue;\r\n}\r\n\r\nexport default useDebounce;\r\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\nimport React, { useEffect, useState, useCallback, useMemo, ReactElement, KeyboardEvent, useRef } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport InputField from \"ReactComponents/InputField/input-field\";\r\nimport useOnClickOutside from \"hooks/useOnClickOutside\";\r\nimport IconClose from \"ReactComponents/Shared/Icons/icon-close2\";\r\nimport useDebounce from \"hooks/useDebounce\";\r\nimport useAsync from \"hooks/useAsync\";\r\nimport IconLocation from \"ReactComponents/Shared/Icons/icon-location\";\r\n\r\nexport interface IAsyncSelectProps<T> {\r\n    required?: boolean;\r\n    disabled?: boolean;\r\n    selectedOption?: T;\r\n    fetcher: (searchTerm: string) => Promise<T[]>;\r\n    onChange?: (option: T) => void;\r\n    onClear?: () => void;\r\n    emptyMessage?: string;\r\n    placeholder?: string;\r\n    icon?: ReactElement;\r\n    debounceMs?: number;\r\n    onClearLabel?: string;\r\n    getOptionLabel: (option: T) => string;\r\n    getOptionKey: (option: T) => string;\r\n    label?: string;\r\n    id?: string;\r\n}\r\n\r\nfunction scrollIntoView(el: HTMLElement) {\r\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n    // @ts-ignore-line\r\n    if (!Element.prototype.scrollIntoViewIfNeeded) {\r\n        return el.scrollIntoView();\r\n    }\r\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n    // @ts-ignore-line\r\n    el.scrollIntoViewIfNeeded();\r\n}\r\n\r\nconst AsyncSelect = <T,>({\r\n    selectedOption,\r\n    fetcher,\r\n    onChange,\r\n    onClear,\r\n    onClearLabel,\r\n    emptyMessage,\r\n    placeholder,\r\n    getOptionLabel,\r\n    getOptionKey,\r\n    required,\r\n    disabled,\r\n    debounceMs = 500,\r\n    icon,\r\n    label,\r\n    id\r\n}: IAsyncSelectProps<T>) => {\r\n    console.log(\"selectedOption:\", selectedOption);\r\n    const [isSearchActive, setIsSearchActive] = useState(false);\r\n    const [options, setOptions] = useState<T[]>([]);\r\n    const [searchTerm, setSearchTerm] = useState(\"\");\r\n    const [cursor, setCursor] = useState<number>();\r\n    const optionRefs = useRef<HTMLButtonElement[]>([]);\r\n\r\n    useEffect(() => {\r\n        optionRefs.current = [];\r\n    }, [options]);\r\n\r\n    const debouncedSearchTerm = useDebounce(searchTerm, debounceMs);\r\n    const getOptions = useAsync(() => fetcher(debouncedSearchTerm), {\r\n        immediate: false,\r\n        onExecute() {\r\n            setIsSearchActive(true);\r\n        },\r\n        onSuccess(options) {\r\n            setOptions(options);\r\n        }\r\n    });\r\n\r\n    useEffect(() => {\r\n        if (!debouncedSearchTerm) {\r\n            return;\r\n        }\r\n        getOptions.execute();\r\n    }, [debouncedSearchTerm]);\r\n\r\n    const onSearchExit = useCallback(() => {\r\n        setOptions([]);\r\n        setIsSearchActive(false);\r\n        setSearchTerm(\"\");\r\n        setCursor(undefined);\r\n    }, []);\r\n\r\n    const handleOnChange = useCallback((option: T) => {\r\n        onChange?.(option);\r\n        onSearchExit();\r\n    }, []);\r\n\r\n    const onReset = useMemo(() => {\r\n        if (searchTerm.length > 0) {\r\n            return () => {\r\n                setSearchTerm(\"\");\r\n                setOptions([]);\r\n                setIsSearchActive(false);\r\n                inputRef.current?.focus();\r\n            };\r\n        }\r\n        return;\r\n    }, [searchTerm]);\r\n\r\n    const _icon = useMemo((): ReactElement | undefined => {\r\n        if (searchTerm.length > 0) {\r\n            return (\r\n                <div className={classNames(\"async-select__icon\", \"async-select__icon--clear\")}>\r\n                    <IconClose />\r\n                </div>\r\n            );\r\n        }\r\n        // if (selectedOption) return <IconCircularCheck />;\r\n        return icon;\r\n    }, [searchTerm, selectedOption]);\r\n\r\n    const inputRef = useOnClickOutside<HTMLInputElement>(onSearchExit);\r\n\r\n    const onUpArrowKey = () => {\r\n        if (isSearchActive && options.length) {\r\n            setCursor(prevIndex => {\r\n                prevIndex = prevIndex ?? options.length;\r\n                const newIndex = prevIndex > 0 ? prevIndex - 1 : options.length - 1;\r\n                if (optionRefs.current[newIndex]) {\r\n                    scrollIntoView(optionRefs.current[newIndex]);\r\n                    optionRefs.current[newIndex].focus();\r\n                }\r\n                return newIndex;\r\n            });\r\n        }\r\n    };\r\n\r\n    const onDownArrowKey = () => {\r\n        if (isSearchActive && options.length) {\r\n            setCursor(prevIndex => {\r\n                prevIndex = prevIndex ?? -1;\r\n                const newIndex = prevIndex < options.length - 1 ? prevIndex + 1 : 0;\r\n                if (optionRefs.current[newIndex]) {\r\n                    scrollIntoView(optionRefs.current[newIndex]);\r\n                    optionRefs.current[newIndex].focus();\r\n                }\r\n                return newIndex;\r\n            });\r\n        }\r\n        if (!isSearchActive && options.length) {\r\n            setIsSearchActive(true);\r\n            if (optionRefs.current[0]) {\r\n                scrollIntoView(optionRefs.current[0]);\r\n            }\r\n        }\r\n    };\r\n\r\n    const onEnterKey = () => {\r\n        if (isSearchActive && options.length && cursor) {\r\n            handleOnChange(options[cursor]);\r\n        }\r\n    };\r\n\r\n    const handleOnOptionsKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n        switch (event.key) {\r\n            case \"ArrowUp\":\r\n                event.preventDefault();\r\n                onUpArrowKey();\r\n                break;\r\n\r\n            case \"ArrowDown\":\r\n                event.preventDefault();\r\n                onDownArrowKey();\r\n                break;\r\n\r\n            case \"Enter\":\r\n                event.preventDefault();\r\n                onEnterKey();\r\n                break;\r\n\r\n            case \"Escape\":\r\n                event.preventDefault();\r\n                setIsSearchActive(false);\r\n                setCursor(0);\r\n                inputRef.current?.focus();\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n    };\r\n\r\n    const handleOnClear = () => {\r\n        if (onClear) {\r\n            onClear();\r\n            onReset?.();\r\n        }\r\n    };\r\n\r\n    return (\r\n        <div className={classNames(\"async-select\", { \"async-select--optionSelected\": selectedOption })}>\r\n            <div onKeyDown={handleOnOptionsKeyDown}>\r\n                <InputField\r\n                    id={id}\r\n                    inputRef={inputRef}\r\n                    required={required && !selectedOption}\r\n                    disabled={disabled}\r\n                    value={searchTerm}\r\n                    onChange={e => setSearchTerm(e.currentTarget.value)}\r\n                    placeholder={selectedOption ? getOptionLabel(selectedOption) : placeholder}\r\n                    label={label}\r\n                    icon={_icon}\r\n                    onIconClick={onReset}\r\n                />\r\n                <div\r\n                    className={classNames(\"async-select__options\", {\r\n                        \"async-select__options--active\": isSearchActive\r\n                    })}\r\n                >\r\n                    {options.length > 0 ? (\r\n                        options.map((option, index) => (\r\n                            <button\r\n                                ref={el => {\r\n                                    if (!el) {\r\n                                        return;\r\n                                    }\r\n                                    optionRefs.current[index] = el;\r\n                                }}\r\n                                key={getOptionKey(option)}\r\n                                className={classNames(\"async-select__option\", {\r\n                                    \"async-select__option--selected\":\r\n                                        option === selectedOption || cursor === index\r\n                                })}\r\n                                type=\"button\"\r\n                                onClick={() => handleOnChange(option)}\r\n                                onMouseEnter={() => setCursor(index)}\r\n                                onFocus={() => setCursor(index)}\r\n                            >\r\n                                {getOptionLabel(option)}\r\n                            </button>\r\n                        ))\r\n                    ) : !getOptions.isPending ? (\r\n                        <div className=\"async-select__empty-result\">{emptyMessage}</div>\r\n                    ) : null}\r\n                </div>\r\n            </div>\r\n            {selectedOption && (\r\n                <div className=\"async-select__selected-option\">\r\n                    <IconLocation />\r\n                    <span>{getOptionLabel(selectedOption)}</span>\r\n                    {onClear && (\r\n                        <button\r\n                            type=\"button\"\r\n                            className=\"button-reset async-select__remove-selected-option\"\r\n                            onClick={() => handleOnClear()}\r\n                        >\r\n                            {onClearLabel || \"Fjern\"}\r\n                            <span className=\"sr-only\">{getOptionLabel(selectedOption)}</span>\r\n                        </button>\r\n                    )}\r\n                </div>\r\n            )}\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default AsyncSelect;\r\n","import { RefObject, useEffect, useRef } from \"react\";\r\n\r\ntype Handler = (event: MouseEvent) => void;\r\nfunction useOnClickOutside<T extends HTMLElement = HTMLElement>(handler: Handler): RefObject<T> {\r\n    const ref = useRef<T>(null);\r\n    useEffect(() => {\r\n        const listener = (event: MouseEvent) => {\r\n            // Do nothing if clicking ref's element or descendent elements\r\n            if (!ref.current || ref.current.contains(event.target as Node)) {\r\n                return;\r\n            }\r\n\r\n            handler(event);\r\n        };\r\n\r\n        document.addEventListener(\"click\", listener);\r\n\r\n        return () => {\r\n            document.removeEventListener(\"click\", listener);\r\n        };\r\n    }, [ref]);\r\n    return ref;\r\n}\r\n\r\nexport default useOnClickOutside;\r\n","import React, { InputHTMLAttributes } from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nexport interface ICheckboxProps\r\n    extends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"value\" | \"checked\"> {\r\n    id?: string;\r\n    label?: string;\r\n    error?: string;\r\n    onChange: (checked: boolean) => void;\r\n    value: boolean;\r\n}\r\n\r\nconst Checkbox: React.FC<ICheckboxProps> = ({\r\n    id,\r\n    disabled = false,\r\n    error,\r\n    onChange,\r\n    label,\r\n    value,\r\n    ...rest\r\n}) => {\r\n    function onChangeHandler() {\r\n        onChange(!value);\r\n    }\r\n\r\n    return (\r\n        <div\r\n            className={classNames(\"custom-checkbox\", {\r\n                \"custom-checkbox--disabled\": disabled,\r\n                \"custom-checkbox--error\": error\r\n            })}\r\n        >\r\n            <label>\r\n                <input\r\n                    type=\"checkbox\"\r\n                    id={id}\r\n                    disabled={disabled}\r\n                    onChange={onChangeHandler}\r\n                    checked={!!value}\r\n                    {...rest}\r\n                />\r\n                {label && <span className=\"content-rich-text\" dangerouslySetInnerHTML={{ __html: label }} />}\r\n            </label>\r\n\r\n            {error && <span className=\"custom-checkbox__error-message\">{error}</span>}\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default Checkbox;\r\n","import React, { RefObject, ReactElement, InputHTMLAttributes } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport { InputAutocompleteAttribute } from \"types/InputAutocompleteAttribute\";\r\n\r\nexport interface IInputFieldProps extends InputHTMLAttributes<HTMLInputElement> {\r\n    autoComplete?: InputAutocompleteAttribute;\r\n    inputRef?: RefObject<HTMLInputElement>;\r\n    label?: string;\r\n    helperText?: string;\r\n    error?: string;\r\n    icon?: ReactElement;\r\n    onIconClick?: () => void;\r\n}\r\n\r\nconst InputField: React.FC<IInputFieldProps> = ({\r\n    icon,\r\n    onIconClick,\r\n    inputRef,\r\n    label,\r\n    error,\r\n    helperText,\r\n    ...props\r\n}) => {\r\n    const baseClass = \"input-field__field\";\r\n    const inputClasses = classNames(baseClass, {\r\n        \"input-field__field--error\": error,\r\n        \"input-field__field--filled\": props.value,\r\n        \"input-field__field--hasIcon\": icon\r\n    });\r\n\r\n    return (\r\n        <div className=\"input-field\">\r\n            {label && <label htmlFor={props.id}>{props.required ? `${label}*` : label}</label>}\r\n            <input {...props} ref={inputRef} className={inputClasses} placeholder={props.placeholder} />\r\n            {icon && !onIconClick && <div className=\"input-field__icon\">{icon}</div>}\r\n            {icon && onIconClick && (\r\n                <button\r\n                    type=\"button\"\r\n                    onClick={onIconClick}\r\n                    onKeyUp={e => e.code === \"Enter\" && onIconClick()}\r\n                    className={classNames(\"input-field__icon\", \"input-field__icon--isButton\")}\r\n                >\r\n                    {icon}\r\n                </button>\r\n            )}\r\n            {error && <span className=\"input-field__error-message\">{error}</span>}\r\n            {!error && helperText && <span className=\"input-field__helper-text\">{helperText}</span>}\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default InputField;\r\n","import React from \"react\";\r\n\r\nconst IconLocation = () => {\r\n    return (\r\n        <svg\r\n            width=\"15\"\r\n            height=\"21\"\r\n            viewBox=\"0 0 15 21\"\r\n            fill=\"none\"\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n            role=\"presentation\"\r\n        >\r\n            <path\r\n                d=\"M7.84268 8.64641C8.93371 8.64641 9.81817 7.76196 9.81817 6.67092C9.81817 5.57989 8.93371 4.69543 7.84268 4.69543C6.75164 4.69543 5.86719 5.57989 5.86719 6.67092C5.86719 7.76196 6.75164 8.64641 7.84268 8.64641Z\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"1.5\"\r\n                strokeLinecap=\"round\"\r\n                strokeLinejoin=\"round\"\r\n            />\r\n            <path\r\n                d=\"M2.42773 6.97645C2.42773 6.93747 2.42773 6.8986 2.42773 6.85985C2.46502 3.93656 4.86751 1.55851 7.80389 1.53785C8.5183 1.53295 9.22661 1.66882 9.88805 1.93764C10.5495 2.20646 11.151 2.60291 11.6579 3.10416C12.1648 3.60541 12.5671 4.20155 12.8416 4.85826C13.1161 5.51497 13.2574 6.21926 13.2574 6.93058C13.2574 6.9684 13.2574 7.00622 13.2574 7.04369C13.231 8.06886 12.9037 9.06389 12.3159 9.90604L8.27729 15.7551C8.22879 15.8252 8.1639 15.8825 8.0882 15.9221C8.01251 15.9618 7.92827 15.9825 7.84276 15.9825C7.75724 15.9825 7.673 15.9618 7.59731 15.9221C7.52161 15.8825 7.45672 15.8252 7.40822 15.7551L3.37452 9.90954C2.77251 9.04759 2.44282 8.02623 2.42773 6.97645V6.97645Z\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"1.5\"\r\n                strokeLinecap=\"round\"\r\n                strokeLinejoin=\"round\"\r\n            />\r\n            <path\r\n                d=\"M3.23511 14.1809C2.27205 14.7678 1.6875 15.5399 1.6875 16.3858C1.6875 18.2222 4.44732 19.7118 7.84584 19.7118C11.2444 19.7118 14.0007 18.2222 14.0007 16.3851C14.0007 15.5396 13.4163 14.7677 12.4541 14.1809\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"1.5\"\r\n                strokeLinecap=\"round\"\r\n                strokeLinejoin=\"round\"\r\n            />\r\n        </svg>\r\n    );\r\n};\r\n\r\nexport default IconLocation;\r\n","import { Placement } from \"@popperjs/core\";\r\nimport classNames from \"classnames\";\r\nimport React, { ReactElement, useCallback, useState } from \"react\";\r\nimport { usePopper } from \"react-popper\";\r\n\r\nexport interface ITooltipProps {\r\n    placement?: Placement;\r\n    triggerElement: ReactElement;\r\n    id: string;\r\n}\r\n\r\nconst Tooltip: React.FC<ITooltipProps> = ({ placement = \"bottom\", children, triggerElement, id }) => {\r\n    const [referenceElement, setReferenceElement] = useState<HTMLButtonElement | null>(null);\r\n    const [popperElement, setPopperElement] = useState<HTMLDivElement | null>(null);\r\n    const [isOpen, setIsOpen] = useState(false);\r\n    const toggle = useCallback(() => setIsOpen(prevState => !prevState), []);\r\n    const isHoverableDevice =\r\n        typeof window !== \"undefined\" && window.matchMedia(\"(hover: hover) and (pointer: fine)\");\r\n\r\n    const { styles, attributes } = usePopper(referenceElement, popperElement, {\r\n        placement,\r\n        modifiers: [\r\n            {\r\n                name: \"offset\",\r\n                options: {\r\n                    offset: [0, 10]\r\n                }\r\n            },\r\n            {\r\n                name: \"flip\",\r\n                enabled: true,\r\n                options: {\r\n                    fallbackPlacements: [\"bottom\", \"top\", \"right\", \"left\"]\r\n                }\r\n            }\r\n        ]\r\n    });\r\n\r\n    return (\r\n        <div className=\"tooltip\" role=\"tooltip\">\r\n            <button\r\n                type=\"button\"\r\n                ref={setReferenceElement}\r\n                className=\"tooltip__reference-element\"\r\n                onMouseEnter={() => (isHoverableDevice ? setIsOpen(true) : null)}\r\n                onMouseLeave={() => (isHoverableDevice ? setIsOpen(false) : null)}\r\n                onClick={() => (!isHoverableDevice ? toggle() : null)}\r\n                onFocus={() => setIsOpen(true)}\r\n                onBlur={() => setIsOpen(false)}\r\n                aria-label={isOpen ? \"Luk forklarende besked\" : \"Åbn forklarende besked\"}\r\n                aria-expanded={isOpen}\r\n                aria-labelledby={id}\r\n            >\r\n                {triggerElement}\r\n            </button>\r\n            <div\r\n                id={id}\r\n                ref={setPopperElement}\r\n                className={classNames(\"tooltip__popper-element\", {\r\n                    \"tooltip__popper-element--hidden\": !isOpen\r\n                })}\r\n                style={styles.popper}\r\n                {...attributes.popper}\r\n            >\r\n                {children}\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default Tooltip;\r\n","import React from \"react\";\r\n\r\nexport interface IUnicUserInfoCardProps {\r\n    fullNameLabel: string;\r\n    fullName: string;\r\n    unicIdLabel: string;\r\n    unicId: string;\r\n}\r\n\r\nconst UnicUserInfoCard: React.FC<IUnicUserInfoCardProps> = ({\r\n    fullNameLabel,\r\n    fullName,\r\n    unicIdLabel,\r\n    unicId\r\n}) => {\r\n    return (\r\n        <div className=\"unic-user-info-card\">\r\n            <div className=\"label\">{fullNameLabel}:</div>\r\n            <div className=\"value\">{fullName}</div>\r\n\r\n            <div className=\"label\">{unicIdLabel}:</div>\r\n            <div className=\"value\">{unicId}</div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default UnicUserInfoCard;\r\n"],"names":["getInstitutions","searchTerm","response","callServer","endpoints","Success","Error","ErrorMessage","Payload","svg","width","height","viewBox","fill","xmlns","role","path","d","stroke","strokeWidth","strokeLinecap","value","delay","useState","debouncedValue","setDebouncedValue","useEffect","timer","setTimeout","clearTimeout","scrollIntoView","el","Element","prototype","scrollIntoViewIfNeeded","selectedOption","fetcher","onChange","onClear","onClearLabel","emptyMessage","placeholder","getOptionLabel","getOptionKey","required","disabled","debounceMs","icon","label","id","console","log","isSearchActive","setIsSearchActive","options","setOptions","setSearchTerm","cursor","setCursor","optionRefs","useRef","current","debouncedSearchTerm","useDebounce","getOptions","useAsync","immediate","onExecute","onSuccess","execute","handler","ref","onSearchExit","useCallback","undefined","handleOnChange","option","onReset","useMemo","length","inputRef","focus","_icon","div","className","classNames","IconClose","listener","event","contains","target","document","addEventListener","removeEventListener","onKeyDown","key","preventDefault","prevIndex","newIndex","InputField","e","currentTarget","onIconClick","map","index","button","type","onClick","onMouseEnter","onFocus","isPending","IconLocation","span","error","rest","input","checked","dangerouslySetInnerHTML","__html","helperText","props","inputClasses","htmlFor","onKeyUp","code","strokeLinejoin","placement","children","triggerElement","referenceElement","setReferenceElement","popperElement","setPopperElement","isOpen","setIsOpen","toggle","prevState","isHoverableDevice","window","matchMedia","usePopper","modifiers","name","offset","enabled","fallbackPlacements","styles","attributes","onMouseLeave","onBlur","aria-label","aria-expanded","aria-labelledby","style","popper","fullNameLabel","fullName","unicIdLabel","unicId"],"sourceRoot":""}