{"version":3,"file":"index.mjs","sources":[""],"sourcesContent":["import { bubble } from \"@web3r/flowerkit/evt\";\r\nimport { wait, getDebouncedFn } from \"@web3r/flowerkit/fn\";\r\nimport {\r\n  useRef,\r\n  useEffect,\r\n  useState,\r\n  useMemo,\r\n  useCallback,\r\n  useImperativeHandle,\r\n} from \"react\";\r\nimport type {\r\n  SyntheticEvent, MouseEvent, FC, ReactElement, FocusEvent, KeyboardEvent,\r\n  Dispatch, SetStateAction,\r\n  AnimationEventHandler, TouchEventHandler,\r\n} from \"react\";\r\nimport type {\r\n  ActionMeta, GroupBase, OnChangeValue, OptionsOrGroups,\r\n} from \"react-select\";\r\nimport ReactSelect from \"react-select\";\r\nimport AsyncSelect from \"react-select/async\";\r\nimport { getDocument } from \"ssr-window\";\r\nimport type { IInputRef } from \"#package/components/input\";\r\nimport type { IComponentBaseProps } from \"#package/types\";\r\nimport { selectEmptyOptions } from \"./config/constants\";\r\nimport type {\r\n  TOptionType,\r\n  IGetOptionsModifyParams,\r\n  IStateActions,\r\n  ISelectRef,\r\n  TOnResetParams,\r\n  ISelect,\r\n  TSelectCtx,\r\n  TSelectValue,\r\n  TSelectPackageAPI,\r\n} from \"./config/types\";\r\nimport { SelectContext } from \"./context\";\r\nimport {\r\n  getInitialValue,\r\n  getOptions,\r\n  isOptionsEqual,\r\n  onOptionChange,\r\n  getComponents,\r\n  getStateClasses,\r\n} from \"./utils\";\r\nimport { constants } from \"../../constants\";\r\nimport { getElRefHelper } from \"../../utils/react/getElRefHelper\";\r\nimport { useCN } from \"../../utils/react/useCN\";\r\nimport { useSSGRender } from \"../../utils/react/useSSGRender\";\r\nimport \"./style.pcss\";\r\n\r\n/**\r\n * Компонент выпадающего списка\r\n * @returns {ReactElement}\r\n */\r\nconst Select: FC<ISelect & IComponentBaseProps> = (props): ReactElement => {\r\n\r\n  const {\r\n    baseClass = \"formSelect\",\r\n    extraClasses = {},\r\n    extraAttrs = {},\r\n    name = \"\",\r\n    id,\r\n    options = selectEmptyOptions,\r\n    getOptionsModify,\r\n    onChange,\r\n    onKeyDown,\r\n    onClick,\r\n    onReset,\r\n    onMount,\r\n    onUnmount,\r\n    onBlur,\r\n    onMenuToggle,\r\n    onSelectChangeRequest,\r\n    onOptionsSearchRequest,\r\n    form,\r\n    value,\r\n    placeholder = \"\",\r\n    tabIndex = -1,\r\n    isLoading = false,\r\n    isRequired = false,\r\n    isDisabled = false,\r\n    isSearchable = false,\r\n    isClearable = false,\r\n    isCheckboxView = false,\r\n    isCountView = false,\r\n    isAsync = false,\r\n    isMulti = false,\r\n    isAutoScroll = false,\r\n    loadOptionsDebounce = 500,\r\n    formatOptionLabel = ({ label, data = {} }: TOptionType) => `${data?.prefix ?? \"\"}${label ?? \"\"}`,\r\n    formatCount,\r\n    customComponents = {},\r\n    closeMenuOnSelect,\r\n    closeMenuOnScroll = false,\r\n    menuShouldBlockScroll = false,\r\n    autoFocus = false,\r\n    openMenuOnFocus = true,\r\n    backspaceRemovesValue = false,\r\n    openMenuOnClick = true,\r\n    blurInputOnSelect,\r\n    escapeClearsValue = true,\r\n    menuShouldScrollIntoView = false,\r\n    captureMenuScroll = false,\r\n    hideSelectedOptions = false,\r\n    icons = {\r\n      loading: \"loading\",\r\n      dropdown: \"dropdown\",\r\n      clear: \"clear\",\r\n      remove: \"remove\",\r\n    },\r\n    styles = {\r\n      clearIndicator: () => {},\r\n      clearValue: () => {},\r\n      container: () => {},\r\n      control: () => {},\r\n      dropdownIndicator: () => {},\r\n      group: () => {},\r\n      groupHeading: () => {},\r\n      indicatorsContainer: () => {},\r\n      indicatorSeparator: () => {},\r\n      input: () => {},\r\n      loadingIndicator: () => {},\r\n      loadingMessage: () => {},\r\n      menu: () => {},\r\n      menuList: () => {},\r\n      menuPortal: () => {},\r\n      multiValue: () => {},\r\n      multiValueLabel: () => {},\r\n      multiValueRemove: () => {},\r\n      noOptionsMessage: () => {},\r\n      option: () => {},\r\n      placeholder: () => {},\r\n      singleValue: () => {},\r\n      valueContainer: () => {},\r\n    },\r\n    isOpen,\r\n    ref,\r\n  } = props || {};\r\n\r\n  const { getCN } = useCN(baseClass);\r\n\r\n  const selectRef = useRef<TSelectPackageAPI>(null);\r\n  const inputRef = useRef<IInputRef | null>(null);\r\n  const containerRef = useRef<HTMLDivElement | null>(null);\r\n\r\n  const normalizedValue = useMemo<TSelectValue<typeof isMulti>>(() => getInitialValue({ value, isMulti, options }), [ value, isMulti, options ]);\r\n\r\n  const originalValue = useRef<TSelectValue<typeof isMulti>>(normalizedValue);\r\n  const originalOptions = useRef(options);\r\n\r\n  const stateClasses = useMemo(() => getStateClasses(getCN), [ getCN ]) as Record<string, string>;\r\n\r\n  // main state values\r\n  const [ selectValue, setSelectValue ] = useState<TSelectValue<typeof isMulti>>(normalizedValue);\r\n  const [ selectOptions, setSelectOptions ] = useState<TOptionType[]>(options);\r\n  const [ selectDisabled, setSelectDisabled ] = useState<boolean | undefined>(isDisabled);\r\n  const [ selectLoading, setSelectLoading ] = useState<boolean | undefined>(isLoading);\r\n  const [ selectRequired, setSelectRequired ] = useState<boolean | undefined>(isRequired);\r\n  const isMenuControlled = typeof isOpen === \"boolean\";\r\n  const [ selectIsOpen, setSelectIsOpen ] = useState<boolean>(Boolean(isOpen));\r\n  const [ isMenuManaged, setIsMenuManaged ] = useState<boolean>(isMenuControlled);\r\n\r\n  // prev state values\r\n  const prevControlledOpen = useRef<boolean | undefined>(undefined);\r\n  const prevValue = useRef<TSelectValue<typeof isMulti>>(selectValue);\r\n  const prevOptions = useRef<TOptionType[]>(selectOptions);\r\n  const lastSelectedValueRef = useRef<string | null>(null);\r\n  const animationRef = useRef<boolean>(false);\r\n  const prevStateClassesRef = useRef<Record<string, string>>(stateClasses);\r\n\r\n  const getSelectValueSnapshot = useCallback((optionsSnapshot: TOptionType[]): TSelectValue<typeof isMulti> => {\r\n    const refValue = selectRef.current?.getValue() ?? selectEmptyOptions;\r\n    // eslint-disable-next-line no-nested-ternary\r\n    const stateValue = Array.isArray(selectValue) ? selectValue : (selectValue ? [ selectValue ] : selectEmptyOptions);\r\n    const sourceValue = refValue.length ? refValue : stateValue;\r\n\r\n    const valueByOptionsRef = sourceValue.map((item) => {\r\n      if (!item?.value) {\r\n        return item;\r\n      }\r\n      return optionsSnapshot.find((option) => option?.value === item.value) ?? item;\r\n    });\r\n\r\n    if (isMulti) {\r\n      return valueByOptionsRef as TSelectValue<typeof isMulti>;\r\n    }\r\n    return (valueByOptionsRef[0] ?? null) as TSelectValue<typeof isMulti>;\r\n  }, [ isMulti, selectValue ]);\r\n\r\n  const applyOptionsModify = useCallback((type: IGetOptionsModifyParams[\"type\"]) => {\r\n    if (typeof getOptionsModify !== \"function\") {\r\n      return;\r\n    }\r\n    setSelectOptions((prev) => {\r\n      const optionsSnapshot = [ ...prev ];\r\n      const valueSnapshot = getSelectValueSnapshot(optionsSnapshot);\r\n      const valueForModify = type === \"close\"\r\n        && isMulti\r\n        && Array.isArray(valueSnapshot)\r\n        && !!lastSelectedValueRef.current\r\n        ? (() => {\r\n          const latest = valueSnapshot.find((item) => item?.value === lastSelectedValueRef.current);\r\n          if (!latest) {\r\n            return valueSnapshot;\r\n          }\r\n          return [ latest, ...valueSnapshot.filter((item) => item !== latest) ] as TSelectValue<typeof isMulti>;\r\n        })()\r\n        : valueSnapshot;\r\n      const nextOptions = getOptionsModify({\r\n        options: optionsSnapshot,\r\n        value: valueForModify,\r\n        prevOptions: [ ...prev ],\r\n        type,\r\n      });\r\n      if (!Array.isArray(nextOptions)) {\r\n        return prev;\r\n      }\r\n\r\n      const isSameByRef = nextOptions.length === prev.length\r\n        && nextOptions.every((item, index) => item === prev[index]);\r\n      return isSameByRef ? prev : nextOptions;\r\n    });\r\n  }, [ getOptionsModify, getSelectValueSnapshot, isMulti ]);\r\n\r\n  const onMenuOpen = useCallback(() => {\r\n    if (animationRef.current) {\r\n      return;\r\n    }\r\n    const containerEl = getElRefHelper(containerRef);\r\n    if (containerEl) {\r\n      wait(50).finally(() => {\r\n        containerEl.classList.add(stateClasses.isOpen);\r\n      });\r\n    }\r\n    applyOptionsModify(\"open\");\r\n    if (typeof onMenuToggle === \"function\") {\r\n      onMenuToggle(\"open\");\r\n    }\r\n  }, [ applyOptionsModify, onMenuToggle ]);\r\n\r\n  const onMenuClose = useMemo(() => getDebouncedFn(() => {\r\n    const container = getElRefHelper(containerRef);\r\n    const valueInput = getElRefHelper(inputRef);\r\n    if (container) {\r\n      container.classList.remove(stateClasses.isOpen);\r\n      if (valueInput) {\r\n        bubble(valueInput, \"blur\", {\r\n          container,\r\n        });\r\n      }\r\n    }\r\n    applyOptionsModify(\"close\");\r\n    if (typeof onMenuToggle === \"function\") {\r\n      onMenuToggle(\"close\");\r\n    }\r\n  }, 300), [ applyOptionsModify, onMenuToggle ]);\r\n\r\n  const handleMenuOpen = useCallback(() => {\r\n    if (!isMenuControlled) {\r\n      setIsMenuManaged(true);\r\n    }\r\n    setSelectIsOpen(true);\r\n    onMenuOpen();\r\n  }, [ isMenuControlled, onMenuOpen ]);\r\n\r\n  const handleMenuClose = useCallback(() => {\r\n    if (animationRef.current) {\r\n      return;\r\n    }\r\n    if (!isMenuControlled) {\r\n      setIsMenuManaged(true);\r\n    }\r\n    setSelectIsOpen(false);\r\n    onMenuClose();\r\n  }, [ isMenuControlled, onMenuClose ]);\r\n\r\n  const onContainerClick = useCallback(\r\n    (e: MouseEvent<HTMLDivElement>) => {\r\n      if (typeof onClick === \"function\") {\r\n        onClick({\r\n          event: e.nativeEvent,\r\n          stateActions,\r\n          ref: selectRef,\r\n          getData: () => ({\r\n            value: selectValue,\r\n            options: selectOptions,\r\n            original: {\r\n              value,\r\n              options,\r\n            },\r\n          }),\r\n        });\r\n      }\r\n    }, [ selectOptions, onClick, selectValue, value, options ]\r\n  );\r\n\r\n  const handleValidate = (e: CustomEvent) => {\r\n    const containerEl = getElRefHelper(containerRef);\r\n    if (containerEl) {\r\n      containerEl.classList.toggle(constants.stateClasses.invalid, !e.detail.isValid);\r\n    }\r\n  };\r\n\r\n  const setSelectIsOpenState = useCallback<Dispatch<SetStateAction<boolean | undefined>>>((nextState) => {\r\n    setSelectIsOpen((prev) => {\r\n      const resolvedState = typeof nextState === \"function\"\r\n        ? (nextState as (prevState: boolean | undefined) => boolean | undefined)(prev)\r\n        : nextState;\r\n      return Boolean(resolvedState);\r\n    });\r\n  }, []);\r\n\r\n  const stateActions = useMemo<IStateActions>(\r\n    () => ({\r\n      setSelectValue,\r\n      setSelectOptions,\r\n      setSelectDisabled,\r\n      setSelectLoading,\r\n      setSelectRequired,\r\n      setSelectIsOpen: setSelectIsOpenState,\r\n    }), [ setSelectIsOpenState ]);\r\n\r\n  const loadOptions = useMemo(() => getDebouncedFn((\r\n    inputValue: string,\r\n    callback: (options: OptionsOrGroups<TOptionType, GroupBase<TOptionType>>) => void\r\n  ): void => {\r\n    if (onOptionsSearchRequest) {\r\n      void getOptions({\r\n        value: inputValue,\r\n        callback,\r\n        onOptionsSearchRequest,\r\n        stateActions,\r\n        name,\r\n      });\r\n    }\r\n  }, loadOptionsDebounce), [ onOptionsSearchRequest, stateActions, name, loadOptionsDebounce ]);\r\n\r\n  const handleReset = useCallback(\r\n    (e: SyntheticEvent) => {\r\n      const originalOpts = originalOptions.current;\r\n      const originalVal = originalValue.current;\r\n      if (typeof onReset === \"function\") {\r\n        onReset({\r\n          event: e,\r\n          stateActions,\r\n          ref: selectRef,\r\n          getData: () => ({\r\n            value: selectValue,\r\n            options: selectOptions,\r\n            original: {\r\n              value: originalVal,\r\n              options: originalOpts,\r\n            },\r\n          }),\r\n        } as TOnResetParams);\r\n      } else {\r\n        setSelectOptions(originalOpts);\r\n        setSelectValue(originalVal);\r\n      }\r\n    }, [ onReset, selectValue, selectOptions ]\r\n  );\r\n\r\n  const handleChange = useCallback(\r\n    async (data: OnChangeValue<TOptionType, typeof isMulti>, actionData: ActionMeta<TOptionType>) => {\r\n      if (isMulti) {\r\n        if (actionData?.action === \"select-option\" && actionData.option?.value) {\r\n          lastSelectedValueRef.current = actionData.option.value;\r\n        } else if (!Array.isArray(data) || !data.length) {\r\n          lastSelectedValueRef.current = null;\r\n        } else {\r\n          const tail = data[data.length - 1];\r\n          lastSelectedValueRef.current = tail?.value ?? null;\r\n        }\r\n      }\r\n      await onOptionChange<typeof isMulti>({\r\n        actionData,\r\n        data,\r\n        onSelectChangeRequest,\r\n        stateActions,\r\n        selectRef,\r\n        onChange,\r\n        name,\r\n        selectOptions,\r\n        inputRef,\r\n      });\r\n    }, [ selectOptions, onChange, onSelectChangeRequest, name, isMulti ]\r\n  );\r\n\r\n  const handleBlur = useCallback(\r\n    (e: FocusEvent<HTMLInputElement>) => {\r\n      if (typeof onBlur === \"function\") {\r\n        onBlur({\r\n          event: e.nativeEvent,\r\n          stateActions,\r\n          ref: selectRef,\r\n          getData: () => ({\r\n            value: selectValue,\r\n            options: selectOptions,\r\n            original: {\r\n              value,\r\n              options,\r\n            },\r\n          }),\r\n        });\r\n      }\r\n    }, [ onBlur, selectOptions, selectValue, value, options ]\r\n  );\r\n\r\n  const handleKeyDown = useCallback(async (event: KeyboardEvent<HTMLInputElement>) => {\r\n    if (typeof onKeyDown === \"function\") {\r\n      onKeyDown({\r\n        event: event.nativeEvent,\r\n        stateActions,\r\n        getData: () => ({\r\n          value: selectValue,\r\n          options: selectOptions,\r\n          isLoading: selectLoading || false,\r\n        }),\r\n        ref: selectRef,\r\n      });\r\n    } else {\r\n      const inputValue = (event.currentTarget as HTMLInputElement | null)?.value ?? \"\";\r\n      if (\r\n        event?.code?.toLowerCase() === \"backspace\" &&\r\n        backspaceRemovesValue &&\r\n        !!selectValue &&\r\n        !isCountView &&\r\n        !inputValue.length\r\n      ) {\r\n        event.preventDefault();\r\n        if (isMulti) {\r\n          const nextValues = (selectValue as TOptionType[]).slice(0, -1);\r\n          const newValue = nextValues.length ? nextValues : null;\r\n          setSelectValue(newValue);\r\n          await handleChange(newValue, { action: \"remove-value\" } as ActionMeta<TOptionType>);\r\n        } else {\r\n          setSelectValue(null);\r\n          if (isAsync) {\r\n            setSelectOptions(selectEmptyOptions);\r\n          }\r\n          await handleChange(null, { action: \"clear\" } as ActionMeta<TOptionType>);\r\n        }\r\n      }\r\n    }\r\n\r\n  }, [ onKeyDown, stateActions, selectValue, selectOptions, selectLoading, backspaceRemovesValue, isCountView, isMulti, isAsync, handleChange ]);\r\n\r\n  const resolvedCloseMenuOnSelect = closeMenuOnSelect ?? !isMulti;\r\n  const resolvedBlurInputOnSelect = blurInputOnSelect ?? !isMulti;\r\n\r\n  const baseProps = useMemo(() => {\r\n    const passThrough = {\r\n      options: selectOptions,\r\n      isOptionDisabled: (option: TOptionType) => !!option?.data?.isDisabled || false,\r\n      onChange: handleChange,\r\n      onKeyDown: handleKeyDown,\r\n      value: selectValue,\r\n      inputId: id || name,\r\n      closeMenuOnSelect: resolvedCloseMenuOnSelect,\r\n      blurInputOnSelect: resolvedBlurInputOnSelect,\r\n      isDisabled: selectDisabled || selectLoading,\r\n      menuShouldScrollIntoView,\r\n      isLoading: selectLoading,\r\n      isMulti,\r\n      className: getCN(\"inner\"),\r\n      classNamePrefix: getCN(),\r\n      onBlur: handleBlur,\r\n      name,\r\n      form,\r\n      placeholder,\r\n      tabIndex,\r\n      isSearchable,\r\n      isClearable,\r\n      menuIsOpen: (isMenuControlled || isMenuManaged) ? selectIsOpen : undefined,\r\n      onMenuOpen: handleMenuOpen,\r\n      onMenuClose: handleMenuClose,\r\n      formatOptionLabel,\r\n      closeMenuOnScroll,\r\n      menuShouldBlockScroll,\r\n      autoFocus,\r\n      openMenuOnFocus,\r\n      backspaceRemovesValue,\r\n      openMenuOnClick,\r\n      escapeClearsValue,\r\n      captureMenuScroll,\r\n      hideSelectedOptions,\r\n      styles,\r\n    };\r\n    return Object.fromEntries(\r\n      Object.entries(passThrough).filter(([ _, v ]) => v !== undefined)\r\n    );\r\n  }, [\r\n    selectValue, handleMenuOpen, handleMenuClose, selectDisabled, selectLoading,\r\n    selectOptions, handleChange, handleKeyDown, handleBlur, name, selectIsOpen,\r\n    id, isMulti, form, placeholder, tabIndex, isSearchable,\r\n    isClearable, formatOptionLabel,\r\n    resolvedCloseMenuOnSelect, closeMenuOnScroll, menuShouldBlockScroll, autoFocus,\r\n    openMenuOnFocus, backspaceRemovesValue, openMenuOnClick, resolvedBlurInputOnSelect,\r\n    escapeClearsValue, menuShouldScrollIntoView, captureMenuScroll,\r\n    hideSelectedOptions, styles, isMenuControlled, isMenuManaged,\r\n  ]);\r\n\r\n  const components = useMemo(() => getComponents<typeof isMulti>(customComponents), [ customComponents ]);\r\n\r\n  const className = getCN(\"\", {\r\n    isOpen: !!selectIsOpen,\r\n    isValue: Array.isArray(selectValue) ? !!selectValue.length : !!selectValue,\r\n    isSearchable,\r\n    isCheckboxView,\r\n    isAsync,\r\n    isMulti,\r\n    isCountView,\r\n    ...extraClasses,\r\n  });\r\n\r\n  const ctx = useMemo<TSelectCtx>(\r\n    () => ({\r\n      getCN,\r\n      icons,\r\n      isAsync,\r\n      isSearchable,\r\n      isCheckboxView,\r\n      name,\r\n      form,\r\n      isAutoScroll,\r\n      stateActions,\r\n      inputRef,\r\n      handleValidate,\r\n      handleReset,\r\n      getOptionsModify,\r\n      selectValue,\r\n      isRequired: selectRequired,\r\n      isDisabled: selectDisabled,\r\n      isCountView,\r\n      isMulti,\r\n      formatCount,\r\n      formatOptionLabel,\r\n    }), [ icons, isAsync, isSearchable, isCheckboxView, name, form,\r\n      isAutoScroll, stateActions, inputRef, handleValidate, handleReset,\r\n      getOptionsModify, selectValue, selectRequired, selectDisabled, isCountView,\r\n      isMulti, formatCount, formatOptionLabel ]);\r\n\r\n  const onAnimationStart = useCallback<AnimationEventHandler>((e) => {\r\n    const el = getElRefHelper(containerRef);\r\n    if (!!el && !!e.target && (e.target as HTMLElement).classList.contains(getCN(\"menu\"))) {\r\n      animationRef.current = true;\r\n      el.classList.add(stateClasses.isTransition);\r\n      // fallback\r\n      wait(1000).finally(() => {\r\n        animationRef.current = false;\r\n        el.classList.remove(stateClasses.isTransition);\r\n      });\r\n    }\r\n  }, [ getCN, stateClasses.isTransition ]);\r\n\r\n  const onAnimationEnd = useCallback<AnimationEventHandler>((e) => {\r\n    const el = getElRefHelper(containerRef);\r\n    if (!!el && !!e.target && (e.target as HTMLElement).classList.contains(getCN(\"menu\"))) {\r\n      animationRef.current = false;\r\n      el.classList.remove(stateClasses.isTransition);\r\n    }\r\n  }, [ getCN, stateClasses.isTransition ]);\r\n\r\n  const onTouchEnd = useCallback<TouchEventHandler>((e) => {\r\n    e.stopPropagation();\r\n  }, []);\r\n\r\n  useImperativeHandle(\r\n    ref, () => ({\r\n      el: getElRefHelper(containerRef) as HTMLDivElement | null,\r\n      ref: selectRef,\r\n      utils: null,\r\n      getData: () => ({\r\n        value: selectValue,\r\n        options: selectOptions,\r\n        isLoading: !!selectLoading,\r\n      }),\r\n      stateActions,\r\n    }), [ selectValue, selectOptions, selectLoading, stateActions ]\r\n  );\r\n\r\n  useEffect(() => {\r\n    if (typeof onMount === \"function\") {\r\n      onMount();\r\n    }\r\n    return () => {\r\n      if (typeof onUnmount === \"function\") {\r\n        onUnmount();\r\n      }\r\n    };\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (prevValue.current !== selectValue) {\r\n      const valueInput = getElRefHelper(inputRef);\r\n      if (valueInput) {\r\n        bubble(valueInput, \"change\", {\r\n          type: \"select\",\r\n          refs: { selectRef, inputRef },\r\n          data: {\r\n            action: \"change\",\r\n            name,\r\n            value: selectValue,\r\n            options: selectOptions,\r\n          },\r\n          stateActions,\r\n        });\r\n      }\r\n      console.debug(`[Select] Value was changed for select with id/name \"${id || name}\"`, selectValue);\r\n      prevValue.current = selectValue;\r\n    }\r\n  }, [ selectValue, selectOptions, stateActions, id, name ]);\r\n\r\n  useEffect(() => {\r\n    if (!isOptionsEqual(options, prevOptions.current)) {\r\n      setSelectOptions(options);\r\n      if (value !== undefined) {\r\n        setSelectValue(options.length ? normalizedValue : null);\r\n      }\r\n      prevOptions.current = options;\r\n    }\r\n  }, [ options, normalizedValue, value ]);\r\n\r\n  useEffect(() => {\r\n    if (value !== undefined) {\r\n      setSelectValue((prev) => (prev !== normalizedValue ? normalizedValue : prev));\r\n    }\r\n  }, [ value, normalizedValue ]);\r\n\r\n  useEffect(() => {\r\n    const containerEl = getElRefHelper(containerRef);\r\n    if (containerEl) {\r\n      const prevStateClasses = prevStateClassesRef.current;\r\n      containerEl.classList.remove(\r\n        prevStateClasses.isRequired, prevStateClasses.isDisabled, prevStateClasses.isLoading\r\n      );\r\n      containerEl.classList.toggle(stateClasses.isRequired, !!selectRequired);\r\n      containerEl.classList.toggle(stateClasses.isDisabled, !!selectDisabled);\r\n      containerEl.classList.toggle(stateClasses.isLoading, !!selectLoading);\r\n      prevStateClassesRef.current = stateClasses;\r\n    }\r\n  }, [ stateClasses, selectRequired, selectDisabled, selectLoading ]);\r\n\r\n  useEffect(() => {\r\n    if (isRequired !== selectRequired) {\r\n      setSelectRequired(isRequired);\r\n    }\r\n  }, [ isRequired ]);\r\n\r\n  useEffect(() => {\r\n    if (isDisabled !== selectDisabled) {\r\n      setSelectDisabled(isDisabled);\r\n    }\r\n  }, [ isDisabled ]);\r\n\r\n  useEffect(() => {\r\n    if (isLoading !== selectLoading) {\r\n      setSelectLoading(isLoading);\r\n    }\r\n  }, [ isLoading ]);\r\n\r\n  useEffect(() => {\r\n    if (isMenuControlled) {\r\n      setSelectIsOpen(Boolean(isOpen));\r\n    }\r\n  }, [ isMenuControlled, isOpen ]);\r\n\r\n  useEffect(() => {\r\n    if (!isMenuControlled) {\r\n      return;\r\n    }\r\n    if (prevControlledOpen.current === undefined) {\r\n      prevControlledOpen.current = selectIsOpen;\r\n      if (selectIsOpen) {\r\n        onMenuOpen();\r\n      }\r\n      return;\r\n    }\r\n    if (prevControlledOpen.current !== selectIsOpen) {\r\n      selectIsOpen ? onMenuOpen() : onMenuClose();\r\n      prevControlledOpen.current = selectIsOpen;\r\n    }\r\n  }, [ isMenuControlled, selectIsOpen, onMenuOpen, onMenuClose ]);\r\n\r\n  useEffect(() => {\r\n    if (!selectIsOpen) {\r\n      return;\r\n    }\r\n    const onDocumentClick = (e: MouseEvent) => {\r\n      const target = e.target;\r\n      const containerEl = getElRefHelper(containerRef);\r\n      const isInsideSelect = (\r\n        (!!containerEl && !!target && containerEl.contains(target as Node))\r\n        || (target as HTMLElement).getAttribute(\"role\") === \"option\"\r\n      );\r\n      if (!!target && getDocument().documentElement.contains(target as HTMLElement) && !isInsideSelect) {\r\n        handleMenuClose();\r\n        selectRef.current?.blur();\r\n      }\r\n    };\r\n    getDocument().addEventListener(\"click\", onDocumentClick);\r\n    return () => {\r\n      getDocument().removeEventListener(\"click\", onDocumentClick);\r\n    };\r\n  }, [ selectIsOpen, getCN, isMenuControlled, handleMenuClose ]);\r\n\r\n  useEffect(() => {\r\n    if (normalizedValue !== selectValue && typeof getOptionsModify === \"function\") {\r\n      applyOptionsModify(\"change\");\r\n    }\r\n  }, [ selectValue, normalizedValue, getOptionsModify, applyOptionsModify ]);\r\n\r\n  const SSGComponent = useSSGRender(\"data-js-select\", props);\r\n\r\n  if (SSGComponent) {\r\n    return SSGComponent;\r\n  }\r\n\r\n  return (\r\n    <SelectContext value={ctx}>\r\n      <div\r\n        onClick={onContainerClick}\r\n        onAnimationStart={onAnimationStart}\r\n        onAnimationEnd={onAnimationEnd}\r\n        onTouchEnd={onTouchEnd}\r\n        ref={containerRef}\r\n        className={className}\r\n        {...extraAttrs}\r\n      >\r\n        {isAsync ? (\r\n          <AsyncSelect<TOptionType> ref={selectRef} loadOptions={loadOptions} components={components} {...baseProps} />\r\n        ) : (\r\n          <ReactSelect<TOptionType> ref={selectRef} components={components} {...baseProps} />\r\n        )}\r\n      </div>\r\n    </SelectContext>\r\n  );\r\n};\r\n\r\nexport type {\r\n  ISelect, ISelectRef, TOptionType, TSelectPackageAPI, TSelectValue,\r\n};\r\nexport { Select };\r\n"],"names":["Select","props","baseClass","extraClasses","extraAttrs","name","id","options","selectEmptyOptions","getOptionsModify","onChange","onKeyDown","onClick","onReset","onMount","onUnmount","onBlur","onMenuToggle","onSelectChangeRequest","onOptionsSearchRequest","form","value","placeholder","tabIndex","isLoading","isRequired","isDisabled","isSearchable","isClearable","isCheckboxView","isCountView","isAsync","isMulti","isAutoScroll","loadOptionsDebounce","formatOptionLabel","label","data","prefix","formatCount","customComponents","closeMenuOnSelect","closeMenuOnScroll","menuShouldBlockScroll","autoFocus","openMenuOnFocus","backspaceRemovesValue","openMenuOnClick","blurInputOnSelect","escapeClearsValue","menuShouldScrollIntoView","captureMenuScroll","hideSelectedOptions","icons","loading","dropdown","clear","remove","styles","clearIndicator","clearValue","container","control","dropdownIndicator","group","groupHeading","indicatorsContainer","indicatorSeparator","input","loadingIndicator","loadingMessage","menu","menuList","menuPortal","multiValue","multiValueLabel","multiValueRemove","noOptionsMessage","option","singleValue","valueContainer","isOpen","ref","getCN","useCN","selectRef","useRef","inputRef","containerRef","normalizedValue","useMemo","getInitialValue","originalValue","originalOptions","stateClasses","getStateClasses","selectValue","setSelectValue","useState","selectOptions","setSelectOptions","selectDisabled","setSelectDisabled","selectLoading","setSelectLoading","selectRequired","setSelectRequired","isMenuControlled","selectIsOpen","setSelectIsOpen","Boolean","isMenuManaged","setIsMenuManaged","prevControlledOpen","undefined","prevValue","prevOptions","lastSelectedValueRef","animationRef","prevStateClassesRef","getSelectValueSnapshot","useCallback","optionsSnapshot","refValue","current","getValue","stateValue","Array","isArray","sourceValue","length","valueByOptionsRef","map","item","find","applyOptionsModify","type","prev","valueSnapshot","valueForModify","latest","filter","nextOptions","isSameByRef","every","index","onMenuOpen","containerEl","getElRefHelper","wait","finally","classList","add","onMenuClose","getDebouncedFn","valueInput","bubble","handleMenuOpen","handleMenuClose","onContainerClick","e","event","nativeEvent","stateActions","getData","original","handleValidate","toggle","constants","invalid","detail","isValid","setSelectIsOpenState","nextState","resolvedState","loadOptions","inputValue","callback","getOptions","handleReset","originalOpts","originalVal","handleChange","async","actionData","action","tail","onOptionChange","handleBlur","handleKeyDown","currentTarget","code","toLowerCase","preventDefault","nextValues","slice","newValue","resolvedCloseMenuOnSelect","resolvedBlurInputOnSelect","baseProps","passThrough","isOptionDisabled","inputId","className","classNamePrefix","menuIsOpen","Object","fromEntries","entries","_","v","components","getComponents","isValue","ctx","onAnimationStart","el","target","contains","isTransition","onAnimationEnd","onTouchEnd","stopPropagation","useImperativeHandle","utils","useEffect","refs","console","debug","isOptionsEqual","prevStateClasses","onDocumentClick","isInsideSelect","getAttribute","getDocument","documentElement","blur","addEventListener","removeEventListener","SSGComponent","useSSGRender","_jsx","SelectContext","children","AsyncSelect","ReactSelect"],"mappings":"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"}