@vkontakte/vkui 4.41.0 → 4.42.1

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.
Files changed (64) hide show
  1. package/.cache/.eslintcache +1 -1
  2. package/.cache/.stylelintcache +1 -1
  3. package/.cache/.tsbuildinfo +13 -11
  4. package/.cache/ts/src/components/Checkbox/Checkbox.d.ts +4 -3
  5. package/dist/cjs/components/Checkbox/Checkbox.d.ts +4 -3
  6. package/dist/cjs/components/Checkbox/Checkbox.js +12 -2
  7. package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -1
  8. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +2 -2
  9. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  10. package/dist/cjs/components/CustomScrollView/CustomScrollView.js +3 -1
  11. package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
  12. package/dist/cjs/components/CustomSelect/CustomSelect.js +7 -3
  13. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  14. package/dist/cjs/components/Dropdown/Dropdown.js +4 -1
  15. package/dist/cjs/components/Dropdown/Dropdown.js.map +1 -1
  16. package/dist/cjs/components/Search/Search.js +4 -3
  17. package/dist/cjs/components/Search/Search.js.map +1 -1
  18. package/dist/cjs/components/Tooltip/Tooltip.js +1 -0
  19. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  20. package/dist/components/Checkbox/Checkbox.d.ts +4 -3
  21. package/dist/components/Checkbox/Checkbox.js +12 -2
  22. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  23. package/dist/components/ChipsSelect/ChipsSelect.js +2 -2
  24. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  25. package/dist/components/CustomScrollView/CustomScrollView.js +3 -1
  26. package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
  27. package/dist/components/CustomSelect/CustomSelect.js +7 -3
  28. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  29. package/dist/components/Dropdown/Dropdown.js +4 -1
  30. package/dist/components/Dropdown/Dropdown.js.map +1 -1
  31. package/dist/components/Search/Search.js +4 -3
  32. package/dist/components/Search/Search.js.map +1 -1
  33. package/dist/components/Tooltip/Tooltip.js +1 -0
  34. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  35. package/dist/components.css +1 -1
  36. package/dist/components.css.map +1 -1
  37. package/dist/cssm/components/Button/Button.css +1 -1
  38. package/dist/cssm/components/Checkbox/Checkbox.d.ts +4 -3
  39. package/dist/cssm/components/Checkbox/Checkbox.js +12 -2
  40. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  41. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +2 -2
  42. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  43. package/dist/cssm/components/CustomScrollView/CustomScrollView.js +3 -1
  44. package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
  45. package/dist/cssm/components/CustomSelect/CustomSelect.js +7 -3
  46. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  47. package/dist/cssm/components/Dropdown/Dropdown.js +4 -1
  48. package/dist/cssm/components/Dropdown/Dropdown.js.map +1 -1
  49. package/dist/cssm/components/Search/Search.js +4 -3
  50. package/dist/cssm/components/Search/Search.js.map +1 -1
  51. package/dist/cssm/components/Tooltip/Tooltip.js +1 -0
  52. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  53. package/dist/cssm/styles/components.css +1 -1
  54. package/dist/vkui.css +1 -1
  55. package/dist/vkui.css.map +1 -1
  56. package/package.json +1 -1
  57. package/src/components/Button/Button.css +2 -1
  58. package/src/components/Checkbox/Checkbox.tsx +20 -2
  59. package/src/components/ChipsSelect/ChipsSelect.tsx +46 -43
  60. package/src/components/CustomScrollView/CustomScrollView.tsx +6 -1
  61. package/src/components/CustomSelect/CustomSelect.tsx +2 -1
  62. package/src/components/Dropdown/Dropdown.tsx +4 -1
  63. package/src/components/Search/Search.tsx +9 -3
  64. package/src/components/Tooltip/Tooltip.tsx +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ChipsSelect.js","names":["FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","chipsInputDefaultProps","emptyText","creatableText","onChangeStart","noop","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","defaultFilterFn","renderOption","option","restProps","ChipsSelect","props","propsWithDefault","style","onFocus","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","fixDropdownWidth","forceDropdownPortal","useDOM","document","React","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","useExternRef","useChipsSelect","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","target","current","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","includes","useEffect","findIndex","value","useGlobalEventListener","renderChipWrapper","renderChipProps","onRemoveWrapper","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","observableRefs","useMemo","toggleOpened","prevOpened","classNames","readOnly","map","label","hovered","selected","find","selectedOption","prefixClass","children","onMouseDown","onMouseEnter"],"sources":["../../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { classNames } from \"../../lib/classNames\";\nimport { ChipOption, ChipValue, RenderChip } from \"../Chip/Chip\";\nimport { ChipsInputProps } from \"../ChipsInput/ChipsInput\";\nimport {\n ChipsInputBase,\n chipsInputDefaultProps,\n} from \"../ChipsInputBase/ChipsInputBase\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { useChipsSelect } from \"../../hooks/useChipsSelect\";\nimport { noop } from \"../../lib/utils\";\nimport { useDOM } from \"../../lib/dom\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { prefixClass } from \"../../lib/prefixClass\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { defaultFilterFn } from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { FormField } from \"../FormField/FormField\";\nimport { IconButton } from \"../IconButton/IconButton\";\nimport \"./ChipsSelect.css\";\n\nexport interface ChipsSelectProps<Option extends ChipOption>\n extends Omit<ChipsInputProps<Option>, \"after\"> {\n popupDirection?: \"top\" | \"bottom\";\n options?: Option[];\n filterFn?:\n | false\n | ((\n value?: string,\n option?: Option,\n getOptionLabel?: Pick<\n ChipsInputProps<Option>,\n \"getOptionLabel\"\n >[\"getOptionLabel\"]\n ) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (\n e: React.MouseEvent | React.KeyboardEvent,\n option: Option\n ) => void;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n}\n\ntype FocusActionType = \"next\" | \"prev\";\n\nconst FOCUS_ACTION_NEXT: FocusActionType = \"next\";\nconst FOCUS_ACTION_PREV: FocusActionType = \"prev\";\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: \"Ничего не найдено\",\n creatableText: \"Создать значение\",\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption({ option, ...restProps }) {\n return <CustomSelectOption {...restProps} />;\n },\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>(\n props: ChipsSelectProps<Option>\n) => {\n const propsWithDefault = { ...chipsSelectDefaultProps, ...props };\n const {\n style,\n onFocus,\n onKeyDown,\n className,\n fetching,\n renderOption,\n emptyText,\n getRef,\n getRootRef,\n disabled,\n placeholder,\n tabIndex,\n getOptionValue,\n getOptionLabel,\n showSelected,\n getNewOptionData,\n renderChip,\n popupDirection,\n creatable,\n filterFn,\n inputValue,\n creatableText,\n closeAfterSelect,\n onChangeStart,\n before,\n options,\n fixDropdownWidth,\n forceDropdownPortal,\n ...restProps\n } = propsWithDefault;\n\n const { document } = useDOM();\n\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue,\n selectedOptions = [],\n opened,\n setOpened,\n addOptionFromInput,\n filteredOptions,\n addOption,\n handleInputChange,\n clearInput,\n focusedOption,\n setFocusedOption,\n focusedOptionIndex,\n setFocusedOptionIndex,\n } = useChipsSelect(propsWithDefault);\n\n const showCreatable = Boolean(\n creatable && creatableText && !filteredOptions.length && fieldValue\n );\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus!(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n e.target !== rootRef.current &&\n !rootRef.current?.contains(e.target as Node)\n ) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = typeof nextIndex !== \"number\" ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n if (focusedOptionIndex != null) {\n focusOptionByIndex(index, focusedOptionIndex);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown!(e);\n\n if (e.key === \"ArrowUp\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === \"ArrowDown\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (\n e.key === \"Enter\" &&\n !e.defaultPrevented &&\n opened &&\n focusedOptionIndex != null\n ) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart!(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if ([\"Escape\", \"Tab\"].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex != null && filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions, setFocusedOption]);\n\n React.useEffect(() => {\n const index = focusedOption\n ? filteredOptions.findIndex(({ value }) => value === focusedOption.value)\n : -1;\n\n if (\n index === -1 &&\n !!filteredOptions.length &&\n !showCreatable &&\n closeAfterSelect\n ) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [\n filteredOptions,\n focusedOption,\n showCreatable,\n closeAfterSelect,\n setFocusedOption,\n ]);\n\n useGlobalEventListener(document, \"click\", handleClickOutside);\n\n const renderChipWrapper = (\n renderChipProps: RenderChip<Option> | undefined\n ) => {\n if (renderChipProps === undefined) {\n return null;\n }\n const onRemoveWrapper = (\n e: React.MouseEvent | undefined,\n value: ChipValue | undefined\n ) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n renderChipProps.onRemove?.(e, value);\n };\n\n return renderChip!({\n ...renderChipProps,\n onRemove: onRemoveWrapper,\n });\n };\n\n const isPopperDirectionTop = popperPlacement?.includes(\"top\");\n\n const onPlacementChange = React.useCallback(\n (placement?: Placement) => {\n setPopperPlacement(placement);\n },\n [setPopperPlacement]\n );\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const observableRefs = React.useMemo(\n () => [scrollBoxRef, rootRef],\n [rootRef, scrollBoxRef]\n );\n\n const toggleOpened = () => {\n setOpened((prevOpened) => !prevOpened);\n };\n\n return (\n <FormField\n vkuiClass={classNames(\n \"ChipsSelect\",\n opened && \"Select--open\",\n opened && (isPopperDirectionTop ? \"Select--pop-up\" : \"Select--pop-down\")\n )}\n getRootRef={rootRef}\n style={style}\n className={className}\n disabled={disabled}\n role=\"application\"\n aria-disabled={disabled}\n aria-readonly={restProps.readOnly}\n after={\n <IconButton\n vkuiClass=\"ChipsSelect__dropdown\"\n activeMode=\"\"\n hoverMode=\"\"\n // TODO: add label customization\n aria-label={opened ? \"Скрыть\" : \"Развернуть\"}\n onClick={toggleOpened}\n >\n <DropdownIcon vkuiClass=\"ChipsSelect__icon\" opened={opened} />\n </IconButton>\n }\n before={before}\n >\n <ChipsInputBase\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n />\n {opened && (\n <CustomSelectDropdown\n targetRef={rootRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n observableRefs={observableRefs}\n onPlacementChange={onPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n vkuiClass=\"ChipsSelect__options\"\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n >\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Caption vkuiClass=\"ChipsSelect__empty\">{emptyText}</Caption>\n ) : (\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel!(option);\n const hovered =\n focusedOption &&\n getOptionValue!(option) === getOptionValue!(focusedOption);\n const selected = selectedOptions.find(\n (selectedOption: Option) => {\n return (\n getOptionValue!(selectedOption) === getOptionValue!(option)\n );\n }\n );\n const value = getOptionValue!(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption!({\n className: prefixClass(\"ChipsSelect__option\"),\n option,\n hovered: Boolean(hovered),\n children: label,\n selected: !!selected,\n getRootRef: (e) => {\n if (e) {\n return (chipsSelectOptions[index] = e);\n }\n return undefined;\n },\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart?.(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n )}\n </CustomSelectDropdown>\n )}\n </FormField>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"ChipsSelect.js","names":["FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","chipsInputDefaultProps","emptyText","creatableText","onChangeStart","noop","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","defaultFilterFn","renderOption","option","restProps","ChipsSelect","props","propsWithDefault","style","onFocus","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","fixDropdownWidth","forceDropdownPortal","useDOM","document","React","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","useExternRef","useChipsSelect","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","target","current","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","includes","useEffect","findIndex","value","useGlobalEventListener","renderChipWrapper","renderChipProps","onRemoveWrapper","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","observableRefs","useMemo","toggleOpened","prevOpened","classNames","readOnly","map","label","hovered","selected","find","selectedOption","prefixClass","children","onMouseDown","onMouseEnter"],"sources":["../../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { classNames } from \"../../lib/classNames\";\nimport { ChipOption, ChipValue, RenderChip } from \"../Chip/Chip\";\nimport { ChipsInputProps } from \"../ChipsInput/ChipsInput\";\nimport {\n ChipsInputBase,\n chipsInputDefaultProps,\n} from \"../ChipsInputBase/ChipsInputBase\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { useChipsSelect } from \"../../hooks/useChipsSelect\";\nimport { noop } from \"../../lib/utils\";\nimport { useDOM } from \"../../lib/dom\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { prefixClass } from \"../../lib/prefixClass\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { defaultFilterFn } from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { FormField } from \"../FormField/FormField\";\nimport { IconButton } from \"../IconButton/IconButton\";\nimport \"./ChipsSelect.css\";\n\nexport interface ChipsSelectProps<Option extends ChipOption>\n extends Omit<ChipsInputProps<Option>, \"after\"> {\n popupDirection?: \"top\" | \"bottom\";\n options?: Option[];\n filterFn?:\n | false\n | ((\n value?: string,\n option?: Option,\n getOptionLabel?: Pick<\n ChipsInputProps<Option>,\n \"getOptionLabel\"\n >[\"getOptionLabel\"]\n ) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (\n e: React.MouseEvent | React.KeyboardEvent,\n option: Option\n ) => void;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n}\n\ntype FocusActionType = \"next\" | \"prev\";\n\nconst FOCUS_ACTION_NEXT: FocusActionType = \"next\";\nconst FOCUS_ACTION_PREV: FocusActionType = \"prev\";\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: \"Ничего не найдено\",\n creatableText: \"Создать значение\",\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption({ option, ...restProps }) {\n return <CustomSelectOption {...restProps} />;\n },\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>(\n props: ChipsSelectProps<Option>\n) => {\n const propsWithDefault = { ...chipsSelectDefaultProps, ...props };\n const {\n style,\n onFocus,\n onKeyDown,\n className,\n fetching,\n renderOption,\n emptyText,\n getRef,\n getRootRef,\n disabled,\n placeholder,\n tabIndex,\n getOptionValue,\n getOptionLabel,\n showSelected,\n getNewOptionData,\n renderChip,\n popupDirection,\n creatable,\n filterFn,\n inputValue,\n creatableText,\n closeAfterSelect,\n onChangeStart,\n before,\n options,\n fixDropdownWidth,\n forceDropdownPortal,\n ...restProps\n } = propsWithDefault;\n\n const { document } = useDOM();\n\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue,\n selectedOptions = [],\n opened,\n setOpened,\n addOptionFromInput,\n filteredOptions,\n addOption,\n handleInputChange,\n clearInput,\n focusedOption,\n setFocusedOption,\n focusedOptionIndex,\n setFocusedOptionIndex,\n } = useChipsSelect(propsWithDefault);\n\n const showCreatable = Boolean(\n creatable && creatableText && !filteredOptions.length && fieldValue\n );\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus!(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n e.target !== rootRef.current &&\n !rootRef.current?.contains(e.target as Node)\n ) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = typeof nextIndex !== \"number\" ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n if (focusedOptionIndex != null) {\n focusOptionByIndex(index, focusedOptionIndex);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown!(e);\n\n if (e.key === \"ArrowUp\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === \"ArrowDown\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (\n e.key === \"Enter\" &&\n !e.defaultPrevented &&\n opened &&\n focusedOptionIndex != null\n ) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart!(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if ([\"Escape\", \"Tab\"].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex != null && filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions, setFocusedOption]);\n\n React.useEffect(() => {\n const index = focusedOption\n ? filteredOptions.findIndex(({ value }) => value === focusedOption.value)\n : -1;\n\n if (\n index === -1 &&\n !!filteredOptions.length &&\n !showCreatable &&\n closeAfterSelect\n ) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [\n filteredOptions,\n focusedOption,\n showCreatable,\n closeAfterSelect,\n setFocusedOption,\n ]);\n\n useGlobalEventListener(document, \"click\", handleClickOutside);\n\n const renderChipWrapper = (\n renderChipProps: RenderChip<Option> | undefined\n ) => {\n if (renderChipProps === undefined) {\n return null;\n }\n const onRemoveWrapper = (\n e: React.MouseEvent | undefined,\n value: ChipValue | undefined\n ) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n renderChipProps.onRemove?.(e, value);\n };\n\n return renderChip!({\n ...renderChipProps,\n onRemove: onRemoveWrapper,\n });\n };\n\n const isPopperDirectionTop = popperPlacement?.includes(\"top\");\n\n const onPlacementChange = React.useCallback(\n (placement?: Placement) => {\n setPopperPlacement(placement);\n },\n [setPopperPlacement]\n );\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const observableRefs = React.useMemo(\n () => [scrollBoxRef, rootRef],\n [rootRef, scrollBoxRef]\n );\n\n const toggleOpened = () => {\n setOpened((prevOpened) => !prevOpened);\n };\n\n return (\n <React.Fragment>\n <FormField\n vkuiClass={classNames(\n \"ChipsSelect\",\n opened && \"Select--open\",\n opened &&\n (isPopperDirectionTop ? \"Select--pop-up\" : \"Select--pop-down\")\n )}\n getRootRef={rootRef}\n style={style}\n className={className}\n disabled={disabled}\n role=\"application\"\n aria-disabled={disabled}\n aria-readonly={restProps.readOnly}\n after={\n <IconButton\n vkuiClass=\"ChipsSelect__dropdown\"\n activeMode=\"\"\n hoverMode=\"\"\n // TODO: add label customization\n aria-label={opened ? \"Скрыть\" : \"Развернуть\"}\n onClick={toggleOpened}\n >\n <DropdownIcon vkuiClass=\"ChipsSelect__icon\" opened={opened} />\n </IconButton>\n }\n before={before}\n >\n <ChipsInputBase\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n />\n </FormField>\n {opened && (\n <CustomSelectDropdown\n targetRef={rootRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n observableRefs={observableRefs}\n onPlacementChange={onPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n vkuiClass=\"ChipsSelect__options\"\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n >\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Caption vkuiClass=\"ChipsSelect__empty\">{emptyText}</Caption>\n ) : (\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel!(option);\n const hovered =\n focusedOption &&\n getOptionValue!(option) === getOptionValue!(focusedOption);\n const selected = selectedOptions.find(\n (selectedOption: Option) => {\n return (\n getOptionValue!(selectedOption) === getOptionValue!(option)\n );\n }\n );\n const value = getOptionValue!(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption!({\n className: prefixClass(\"ChipsSelect__option\"),\n option,\n hovered: Boolean(hovered),\n children: label,\n selected: !!selected,\n getRootRef: (e) => {\n if (e) {\n return (chipsSelectOptions[index] = e);\n }\n return undefined;\n },\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart?.(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n )}\n </CustomSelectDropdown>\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
@@ -13,6 +13,7 @@ var _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
13
13
  var _useExternRef = require("../../hooks/useExternRef");
14
14
  var _useEventListener = require("../../hooks/useEventListener");
15
15
  var _useTrackerVisibility2 = require("./useTrackerVisibility");
16
+ var _utils = require("../../lib/utils");
16
17
  var CustomScrollView = function CustomScrollView(_ref) {
17
18
  var className = _ref.className,
18
19
  children = _ref.children,
@@ -147,7 +148,8 @@ var CustomScrollView = function CustomScrollView(_ref) {
147
148
  className: className
148
149
  }, (0, _jsxRuntime.createScopedElement)("div", {
149
150
  vkuiClass: "CustomScrollView__barY",
150
- ref: barY
151
+ ref: barY,
152
+ onClick: _utils.stopPropagation
151
153
  }, (0, _jsxRuntime.createScopedElement)("div", {
152
154
  vkuiClass: (0, _classNames.classNames)("CustomScrollView__trackerY", !trackerVisible && "CustomScrollView__trackerY--hidden"),
153
155
  onMouseEnter: autoHideScrollbar ? onTrackerMouseEnter : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"CustomScrollView.js","names":["CustomScrollView","className","children","externalBoxRef","boxRef","windowResize","autoHideScrollbar","autoHideScrollbarDelay","useDOM","document","window","ratio","React","useRef","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","transformProp","startY","trackerTop","useExternRef","barY","trackerY","setTrackerPosition","scrollTop","current","style","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localRatio","localTrackerHeight","Math","max","display","height","resizeHandler","useEventListener","useIsomorphicLayoutEffect","add","prop","undefined","setScrollPositionFromTracker","onMove","e","preventDefault","diff","clientY","position","min","useTrackerVisibility","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onUp","unsubscribe","scroll","listeners","subscribe","el","forEach","l","remove","onDragStart","classNames"],"sources":["../../../../src/components/CustomScrollView/CustomScrollView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DOMProps, useDOM } from \"../../lib/dom\";\nimport { classNames } from \"../../lib/classNames\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport {\n TrackerOptionsProps,\n useTrackerVisibility,\n} from \"./useTrackerVisibility\";\nimport \"./CustomScrollView.css\";\n\nexport interface CustomScrollViewProps extends DOMProps, TrackerOptionsProps {\n windowResize?: boolean;\n boxRef?: React.Ref<HTMLDivElement>;\n className?: HTMLDivElement[\"className\"];\n children: React.ReactNode;\n}\n\nexport const CustomScrollView = ({\n className,\n children,\n boxRef: externalBoxRef,\n windowResize,\n autoHideScrollbar = false,\n autoHideScrollbarDelay,\n}: CustomScrollViewProps) => {\n const { document, window } = useDOM();\n\n const ratio = React.useRef(NaN);\n const lastTrackerTop = React.useRef(0);\n const clientHeight = React.useRef(0);\n const trackerHeight = React.useRef(0);\n const scrollHeight = React.useRef(0);\n const transformProp = React.useRef(\"\");\n const startY = React.useRef(0);\n const trackerTop = React.useRef(0);\n\n const boxRef = useExternRef(externalBoxRef);\n\n const barY = React.useRef<HTMLDivElement>(null);\n const trackerY = React.useRef<HTMLDivElement>(null);\n\n const setTrackerPosition = (scrollTop: number) => {\n lastTrackerTop.current = scrollTop;\n if (trackerY.current !== null) {\n (trackerY.current.style as any)[\n transformProp.current\n ] = `translate(0, ${scrollTop}px)`;\n }\n };\n\n const setTrackerPositionFromScroll = (scrollTop: number) => {\n const progress = scrollTop / (scrollHeight.current - clientHeight.current);\n setTrackerPosition(\n (clientHeight.current - trackerHeight.current) * progress\n );\n };\n\n const resize = () => {\n if (!boxRef.current || !barY.current || !trackerY.current) {\n return;\n }\n const localClientHeight = boxRef.current.clientHeight;\n const localScrollHeight = boxRef.current.scrollHeight;\n const localRatio = localClientHeight / localScrollHeight;\n const localTrackerHeight = Math.max(localClientHeight * localRatio, 40);\n\n ratio.current = localRatio;\n clientHeight.current = localClientHeight;\n scrollHeight.current = localScrollHeight;\n trackerHeight.current = localTrackerHeight;\n\n if (localRatio >= 1) {\n barY.current.style.display = \"none\";\n } else {\n barY.current.style.display = \"\";\n trackerY.current.style.height = `${localTrackerHeight}px`;\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n }\n };\n\n const resizeHandler = useEventListener(\"resize\", resize);\n\n useIsomorphicLayoutEffect(() => {\n if (windowResize && window) {\n resizeHandler.add(window);\n }\n }, [windowResize, window]);\n\n useIsomorphicLayoutEffect(() => {\n let style = trackerY.current?.style;\n let prop = \"\";\n if (style !== undefined) {\n if (\"transform\" in style) {\n prop = \"transform\";\n } else if (\"webkitTransform\" in style) {\n prop = \"webkitTransform\";\n }\n }\n transformProp.current = prop;\n }, []);\n\n useIsomorphicLayoutEffect(resize);\n\n const setScrollPositionFromTracker = (trackerTop: number) => {\n const progress =\n trackerTop / (clientHeight.current - trackerHeight.current);\n if (boxRef.current !== null) {\n boxRef.current.scrollTop =\n (scrollHeight.current - clientHeight.current) * progress;\n }\n };\n\n const onMove = (e: MouseEvent) => {\n e.preventDefault();\n const diff = e.clientY - startY.current;\n const position = Math.min(\n Math.max(trackerTop.current + diff, 0),\n clientHeight.current - trackerHeight.current\n );\n\n setScrollPositionFromTracker(position);\n };\n\n const {\n trackerVisible,\n onTargetScroll,\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);\n\n const onUp = (e: MouseEvent) => {\n e.preventDefault();\n\n if (autoHideScrollbar) {\n onTrackerDragStop();\n }\n\n unsubscribe();\n };\n\n const scroll = () => {\n if (ratio.current >= 1 || !boxRef.current) {\n return;\n }\n\n if (autoHideScrollbar) {\n onTargetScroll();\n }\n\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n };\n\n const listeners = [\n useEventListener(\"mousemove\", onMove),\n useEventListener(\"mouseup\", onUp),\n ];\n\n function subscribe(el: Document | undefined) {\n if (el) {\n listeners.forEach((l) => l.add(el));\n }\n }\n\n function unsubscribe() {\n listeners.forEach((l) => l.remove());\n }\n\n const onDragStart = (e: React.MouseEvent) => {\n e.preventDefault();\n startY.current = e.clientY;\n trackerTop.current = lastTrackerTop.current;\n\n if (autoHideScrollbar) {\n onTrackerDragStart();\n }\n\n subscribe(document);\n };\n\n return (\n <div vkuiClass=\"CustomScrollView\" className={className}>\n <div vkuiClass=\"CustomScrollView__barY\" ref={barY}>\n <div\n vkuiClass={classNames(\n \"CustomScrollView__trackerY\",\n !trackerVisible && `CustomScrollView__trackerY--hidden`\n )}\n onMouseEnter={autoHideScrollbar ? onTrackerMouseEnter : undefined}\n onMouseLeave={autoHideScrollbar ? onTrackerMouseLeave : undefined}\n ref={trackerY}\n onMouseDown={onDragStart}\n />\n </div>\n\n <div\n vkuiClass=\"CustomScrollView__box\"\n tabIndex={-1}\n ref={boxRef}\n onScroll={scroll}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"CustomScrollView.js","names":["CustomScrollView","className","children","externalBoxRef","boxRef","windowResize","autoHideScrollbar","autoHideScrollbarDelay","useDOM","document","window","ratio","React","useRef","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","transformProp","startY","trackerTop","useExternRef","barY","trackerY","setTrackerPosition","scrollTop","current","style","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localRatio","localTrackerHeight","Math","max","display","height","resizeHandler","useEventListener","useIsomorphicLayoutEffect","add","prop","undefined","setScrollPositionFromTracker","onMove","e","preventDefault","diff","clientY","position","min","useTrackerVisibility","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onUp","unsubscribe","scroll","listeners","subscribe","el","forEach","l","remove","onDragStart","stopPropagation","classNames"],"sources":["../../../../src/components/CustomScrollView/CustomScrollView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DOMProps, useDOM } from \"../../lib/dom\";\nimport { classNames } from \"../../lib/classNames\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport {\n TrackerOptionsProps,\n useTrackerVisibility,\n} from \"./useTrackerVisibility\";\nimport { stopPropagation } from \"../../lib/utils\";\nimport \"./CustomScrollView.css\";\n\nexport interface CustomScrollViewProps extends DOMProps, TrackerOptionsProps {\n windowResize?: boolean;\n boxRef?: React.Ref<HTMLDivElement>;\n className?: HTMLDivElement[\"className\"];\n children: React.ReactNode;\n}\n\nexport const CustomScrollView = ({\n className,\n children,\n boxRef: externalBoxRef,\n windowResize,\n autoHideScrollbar = false,\n autoHideScrollbarDelay,\n}: CustomScrollViewProps) => {\n const { document, window } = useDOM();\n\n const ratio = React.useRef(NaN);\n const lastTrackerTop = React.useRef(0);\n const clientHeight = React.useRef(0);\n const trackerHeight = React.useRef(0);\n const scrollHeight = React.useRef(0);\n const transformProp = React.useRef(\"\");\n const startY = React.useRef(0);\n const trackerTop = React.useRef(0);\n\n const boxRef = useExternRef(externalBoxRef);\n\n const barY = React.useRef<HTMLDivElement>(null);\n const trackerY = React.useRef<HTMLDivElement>(null);\n\n const setTrackerPosition = (scrollTop: number) => {\n lastTrackerTop.current = scrollTop;\n if (trackerY.current !== null) {\n (trackerY.current.style as any)[\n transformProp.current\n ] = `translate(0, ${scrollTop}px)`;\n }\n };\n\n const setTrackerPositionFromScroll = (scrollTop: number) => {\n const progress = scrollTop / (scrollHeight.current - clientHeight.current);\n setTrackerPosition(\n (clientHeight.current - trackerHeight.current) * progress\n );\n };\n\n const resize = () => {\n if (!boxRef.current || !barY.current || !trackerY.current) {\n return;\n }\n const localClientHeight = boxRef.current.clientHeight;\n const localScrollHeight = boxRef.current.scrollHeight;\n const localRatio = localClientHeight / localScrollHeight;\n const localTrackerHeight = Math.max(localClientHeight * localRatio, 40);\n\n ratio.current = localRatio;\n clientHeight.current = localClientHeight;\n scrollHeight.current = localScrollHeight;\n trackerHeight.current = localTrackerHeight;\n\n if (localRatio >= 1) {\n barY.current.style.display = \"none\";\n } else {\n barY.current.style.display = \"\";\n trackerY.current.style.height = `${localTrackerHeight}px`;\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n }\n };\n\n const resizeHandler = useEventListener(\"resize\", resize);\n\n useIsomorphicLayoutEffect(() => {\n if (windowResize && window) {\n resizeHandler.add(window);\n }\n }, [windowResize, window]);\n\n useIsomorphicLayoutEffect(() => {\n let style = trackerY.current?.style;\n let prop = \"\";\n if (style !== undefined) {\n if (\"transform\" in style) {\n prop = \"transform\";\n } else if (\"webkitTransform\" in style) {\n prop = \"webkitTransform\";\n }\n }\n transformProp.current = prop;\n }, []);\n\n useIsomorphicLayoutEffect(resize);\n\n const setScrollPositionFromTracker = (trackerTop: number) => {\n const progress =\n trackerTop / (clientHeight.current - trackerHeight.current);\n if (boxRef.current !== null) {\n boxRef.current.scrollTop =\n (scrollHeight.current - clientHeight.current) * progress;\n }\n };\n\n const onMove = (e: MouseEvent) => {\n e.preventDefault();\n const diff = e.clientY - startY.current;\n const position = Math.min(\n Math.max(trackerTop.current + diff, 0),\n clientHeight.current - trackerHeight.current\n );\n\n setScrollPositionFromTracker(position);\n };\n\n const {\n trackerVisible,\n onTargetScroll,\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);\n\n const onUp = (e: MouseEvent) => {\n e.preventDefault();\n\n if (autoHideScrollbar) {\n onTrackerDragStop();\n }\n\n unsubscribe();\n };\n\n const scroll = () => {\n if (ratio.current >= 1 || !boxRef.current) {\n return;\n }\n\n if (autoHideScrollbar) {\n onTargetScroll();\n }\n\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n };\n\n const listeners = [\n useEventListener(\"mousemove\", onMove),\n useEventListener(\"mouseup\", onUp),\n ];\n\n function subscribe(el: Document | undefined) {\n if (el) {\n listeners.forEach((l) => l.add(el));\n }\n }\n\n function unsubscribe() {\n listeners.forEach((l) => l.remove());\n }\n\n const onDragStart = (e: React.MouseEvent) => {\n e.preventDefault();\n startY.current = e.clientY;\n trackerTop.current = lastTrackerTop.current;\n\n if (autoHideScrollbar) {\n onTrackerDragStart();\n }\n\n subscribe(document);\n };\n\n return (\n <div vkuiClass=\"CustomScrollView\" className={className}>\n <div\n vkuiClass=\"CustomScrollView__barY\"\n ref={barY}\n onClick={stopPropagation}\n >\n <div\n vkuiClass={classNames(\n \"CustomScrollView__trackerY\",\n !trackerVisible && `CustomScrollView__trackerY--hidden`\n )}\n onMouseEnter={autoHideScrollbar ? onTrackerMouseEnter : undefined}\n onMouseLeave={autoHideScrollbar ? onTrackerMouseLeave : undefined}\n ref={trackerY}\n onMouseDown={onDragStart}\n />\n </div>\n\n <div\n vkuiClass=\"CustomScrollView__box\"\n tabIndex={-1}\n ref={boxRef}\n onScroll={scroll}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -174,7 +174,10 @@ function CustomSelectComponent(props) {
174
174
  });
175
175
  }, [props.value]);
176
176
  (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
177
- if (nativeSelectValue !== undefined) {
177
+ if (options.some(function (_ref2) {
178
+ var value = _ref2.value;
179
+ return nativeSelectValue === value;
180
+ })) {
178
181
  var _selectElRef$current;
179
182
  var _event = new Event("change", {
180
183
  bubbles: true
@@ -313,8 +316,8 @@ function CustomSelectComponent(props) {
313
316
  focusOptionByIndex(index);
314
317
  }, [focusOptionByIndex, focusedOptionIndex, options]);
315
318
  React.useEffect(function () {
316
- var _ref2, _props$value4;
317
- var value = (_ref2 = (_props$value4 = props.value) !== null && _props$value4 !== void 0 ? _props$value4 : nativeSelectValue) !== null && _ref2 !== void 0 ? _ref2 : props.defaultValue;
319
+ var _ref3, _props$value4;
320
+ var value = (_ref3 = (_props$value4 = props.value) !== null && _props$value4 !== void 0 ? _props$value4 : nativeSelectValue) !== null && _ref3 !== void 0 ? _ref3 : props.defaultValue;
318
321
  var options = searchable && inputValue !== undefined ? filter(optionsProp, inputValue, filterFn) : optionsProp;
319
322
  setOptions(options);
320
323
  setSelectedOptionIndex(findSelectedIndex(options, value));
@@ -486,6 +489,7 @@ function CustomSelectComponent(props) {
486
489
  onFocus: onFocus,
487
490
  onBlur: onBlur,
488
491
  vkuiClass: openedClassNames,
492
+ before: before,
489
493
  after: icon,
490
494
  selectType: selectType
491
495
  }), selected === null || selected === void 0 ? void 0 : selected.label), (0, _jsxRuntime.createScopedElement)("select", {
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelect.js","names":["findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","CustomSelectComponent","React","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","sizeY","platform","style","onChange","children","onInputChangeProp","onInputChange","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","SelectType","default","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","defaultFilterFn","icon","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","containerRef","useRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","classNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","onKeyboardInput","key","fullInput","optionIndex","getTitleFromChildren","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","multiRef","placeholder","getFormFieldModeFromSelectType","CustomSelect","withAdaptivity"],"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { SelectMimicry } from \"../SelectMimicry/SelectMimicry\";\nimport { debounce, multiRef, getTitleFromChildren } from \"../../lib/utils\";\nimport { classNames } from \"../../lib/classNames\";\nimport { NativeSelectProps } from \"../NativeSelect/NativeSelect\";\nimport { withAdaptivity } from \"../../hoc/withAdaptivity\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { FormFieldProps } from \"../FormField/FormField\";\nimport { HasPlatform } from \"../../types\";\nimport { Input } from \"../Input/Input\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport {\n defaultFilterFn,\n getFormFieldModeFromSelectType,\n} from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { TrackerOptionsProps } from \"../CustomScrollView/useTrackerVisibility\";\nimport { SelectType } from \"../Select/Select\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport \"./CustomSelect.css\";\n\nconst findIndexAfter = (\n options: CustomSelectOptionInterface[] = [],\n startIndex = -1\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce(\"CustomSelect\");\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n \"Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.\",\n \"error\"\n );\n }\n};\n\nfunction defaultRenderOptionFn({\n option,\n ...props\n}: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (\n e: React.MouseEvent<HTMLElement>\n) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue\n) {\n return (\n options.findIndex((item) => {\n value = typeof item.value === \"number\" ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: CustomSelectProps[\"options\"],\n inputValue: string,\n filterFn: CustomSelectProps[\"filterFn\"]\n) => {\n return typeof filterFn === \"function\"\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>[\"value\"];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectProps\n extends NativeSelectProps,\n HasPlatform,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[]\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (\n option: Partial<CustomSelectOptionInterface>\n ) => string\n ) => boolean);\n popupDirection?: \"top\" | \"bottom\";\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n icon?: React.ReactNode;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: keyof typeof SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nfunction CustomSelectComponent(props: CustomSelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n sizeY,\n platform,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = SelectType.default,\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = \"Ничего не найдено\",\n filterFn = defaultFilterFn,\n icon = <DropdownIcon opened={opened} />,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === \"development\") {\n checkOptionsValueType(optionsProp);\n }\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const selectElRef = React.useRef<HTMLSelectElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<\n number | undefined\n >(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(\n props.value !== undefined\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n props.value ?? props.defaultValue\n );\n const [keyboardInput, setKeyboardInput] = React.useState(\"\");\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<\n number | undefined\n >(findSelectedIndex(optionsProp, props.value ?? props.defaultValue));\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue(\n (nativeSelectValue) => props.value ?? nativeSelectValue\n );\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (nativeSelectValue !== undefined) {\n const event = new Event(\"change\", { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined\n ? options[selectedOptionIndex]\n : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n classNames(\n opened && \"Select--open\",\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes(\"top\")\n ? \"Select--pop-up\"\n : \"Select--pop-down\")\n ),\n [dropdownOffsetDistance, opened, popperPlacement]\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput(\"\");\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length]\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (\n index === undefined ||\n index < 0 ||\n index > (options.length ?? 0) - 1\n ) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex\n );\n },\n [options, scrollToElement]\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label)\n .toLowerCase()\n .includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options]\n );\n\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue(\"\");\n setOpened(false);\n setFocusedOptionIndex(-1);\n setOptions(optionsProp);\n onClose?.();\n }, [onClose, optionsProp, resetKeyboardInput]);\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {\n const item = options[focusedOptionIndex];\n\n setNativeSelectValue(item?.value);\n close();\n }\n }, [close, focusedOptionIndex, isValidIndex, options]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === \"function\") {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n React.useEffect(() => {\n if (\n opened &&\n selectedOptionIndex !== undefined &&\n isValidIndex(selectedOptionIndex)\n ) {\n scrollToElement(selectedOptionIndex, true);\n }\n }, [isValidIndex, opened, scrollToElement, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event(\"blur\");\n selectElRef.current?.dispatchEvent(event);\n }, [close]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event(\"focus\");\n selectElRef.current?.dispatchEvent(event);\n }, []);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(\n () => debounce(resetKeyboardInput, 1000),\n [resetKeyboardInput]\n );\n\n const focusOption = React.useCallback(\n (type: \"next\" | \"prev\") => {\n let index = focusedOptionIndex;\n\n if (type === \"next\") {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === \"prev\") {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options]\n );\n\n React.useEffect(() => {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n }, [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n ]);\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback(\n (e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n },\n []\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> =\n React.useCallback(\n (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n },\n [isControlledOutside, onChange, options, selectedOptionIndex]\n );\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> =\n React.useCallback(\n (event) => {\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n areOptionsShown() && focusOption(\"prev\");\n break;\n case \"ArrowDown\":\n areOptionsShown() && focusOption(\"next\");\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused]\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> =\n React.useCallback(\n (e) => {\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === \"development\") {\n warn(\n \"Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет \" +\n \"проигнорировано в v5.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.\"\n );\n }\n setOptions(options);\n setSelectedOptionIndex(\n findSelectedIndex(options, nativeSelectValue)\n );\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp]\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== \" \") {\n onKeyboardInput(event.key);\n return;\n }\n\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n if (opened) {\n areOptionsShown() && focusOption(\"prev\");\n } else {\n open();\n }\n break;\n case \"ArrowDown\":\n if (opened) {\n areOptionsShown() && focusOption(\"next\");\n } else {\n open();\n }\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n case \"Spacebar\":\n case \" \":\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n ]\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectFocused();\n }\n },\n [options, selectFocused]\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n ),\n false\n );\n },\n [focusOptionByIndex]\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ]\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Caption vkuiClass=\"CustomSelect__empty\">{emptyText}</Caption>\n );\n\n if (typeof renderDropdown === \"function\") {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n return (\n <label\n vkuiClass=\"CustomSelect\"\n className={className}\n style={style}\n ref={multiRef(containerRef, getRootRef)}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n vkuiClass={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={props.onClick}\n before={before}\n after={icon}\n placeholder={restProps.placeholder}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n vkuiClass={openedClassNames}\n after={icon}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n observableRefs={scrollBoxRef}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport const CustomSelect = withAdaptivity(CustomSelectComponent, {\n sizeY: true,\n});\n"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AAKA;AAEA;AACA;AAAgF;EAAA;AAGhF,IAAMA,cAAc,GAAG,SAAjBA,cAAc,GAGf;EAAA,IAFHC,OAAsC,uEAAG,EAAE;EAAA,IAC3CC,UAAU,uEAAG,CAAC,CAAC;EAEf,IAAIA,UAAU,IAAID,OAAO,CAACE,MAAM,GAAG,CAAC,EAAE;IACpC,OAAO,CAAC,CAAC;EACX;EACA,OAAOF,OAAO,CAACG,SAAS,CAAC,UAACC,MAAM,EAAEC,CAAC;IAAA,OAAKA,CAAC,GAAGJ,UAAU,IAAI,CAACG,MAAM,CAACE,QAAQ;EAAA,EAAC;AAC7E,CAAC;AAED,IAAMC,eAAe,GAAG,SAAlBA,eAAe,GAGhB;EAAA,IAFHP,OAAsC,uEAAG,EAAE;EAAA,IAC3CQ,QAAgB,uEAAGR,OAAO,CAACE,MAAM;EAEjC,IAAIO,MAAM,GAAG,CAAC,CAAC;EACf,IAAID,QAAQ,IAAI,CAAC,EAAE;IACjB,OAAOC,MAAM;EACf;EACA,KAAK,IAAIJ,CAAC,GAAGG,QAAQ,GAAG,CAAC,EAAEH,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;IACtC,IAAID,OAAM,GAAGJ,OAAO,CAACK,CAAC,CAAC;IAEvB,IAAI,CAACD,OAAM,CAACE,QAAQ,EAAE;MACpBG,MAAM,GAAGJ,CAAC;MACV;IACF;EACF;EACA,OAAOI,MAAM;AACf,CAAC;AAED,IAAMC,IAAI,GAAG,IAAAC,kBAAQ,EAAC,cAAc,CAAC;AAErC,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqB,CAAIZ,OAAsC,EAAK;EACxE,IAAI,IAAIa,GAAG,CAACb,OAAO,CAACc,GAAG,CAAC,UAACC,IAAI;IAAA,6BAAYA,IAAI,CAACC,KAAK;EAAA,EAAC,CAAC,CAACC,IAAI,GAAG,CAAC,EAAE;IAC9DP,IAAI,CACF,6FAA6F,EAC7F,OAAO,CACR;EACH;AACF,CAAC;AAED,SAASQ,qBAAqB,OAGe;EAAA,IAF3Cd,MAAM,QAANA,MAAM;IACHe,KAAK;EAER,OAAO,qCAAC,sCAAkB,EAAKA,KAAK,CAAI;AAC1C;AAEA,IAAMC,gBAAmC,GAAG,SAAtCA,gBAAmC,CACvCC,CAAgC,EAC7B;EACHA,CAAC,CAACC,cAAc,EAAE;AACpB,CAAC;AAED,SAASC,iBAAiB,CACxBvB,OAAsC,EACtCgB,KAAkB,EAClB;EAAA;EACA,6BACEhB,OAAO,CAACG,SAAS,CAAC,UAACY,IAAI,EAAK;IAC1BC,KAAK,GAAG,OAAOD,IAAI,CAACC,KAAK,KAAK,QAAQ,GAAGQ,MAAM,CAACR,KAAK,CAAC,GAAGA,KAAK;IAC9D,OAAOD,IAAI,CAACC,KAAK,KAAKA,KAAK;EAC7B,CAAC,CAAC,mEAAI,CAAC,CAAC;AAEZ;AAEA,IAAMS,MAAM,GAAG,SAATA,MAAM,CACVzB,OAAqC,EACrC0B,UAAkB,EAClBC,QAAuC,EACpC;EACH,OAAO,OAAOA,QAAQ,KAAK,UAAU,GACjC3B,OAAO,CAACyB,MAAM,CAAC,UAACrB,MAAM;IAAA,OAAKuB,QAAQ,CAACD,UAAU,EAAEtB,MAAM,CAAC;EAAA,EAAC,GACxDJ,OAAO;AACb,CAAC;AAED,IAAM4B,cAA6C,GAAG,EAAE;AAyExD,SAASC,qBAAqB,CAACV,KAAwB,EAAE;EAAA;EACvD,sBAA4BW,KAAK,CAACC,QAAQ,CAAC,KAAK,CAAC;IAAA;IAA1CC,MAAM;IAAEC,SAAS;EACxB,IACEC,MAAM,GA6BJf,KAAK,CA7BPe,MAAM;IACNC,IAAI,GA4BFhB,KAAK,CA5BPgB,IAAI;IACJC,SAAS,GA2BPjB,KAAK,CA3BPiB,SAAS;IACTC,MAAM,GA0BJlB,KAAK,CA1BPkB,MAAM;IACNC,UAAU,GAyBRnB,KAAK,CAzBPmB,UAAU;IACVC,cAAc,GAwBZpB,KAAK,CAxBPoB,cAAc;IACdC,KAAK,GAuBHrB,KAAK,CAvBPqB,KAAK;IACLC,QAAQ,GAsBNtB,KAAK,CAtBPsB,QAAQ;IACRC,KAAK,GAqBHvB,KAAK,CArBPuB,KAAK;IACLC,QAAQ,GAoBNxB,KAAK,CApBPwB,QAAQ;IACRC,QAAQ,GAmBNzB,KAAK,CAnBPyB,QAAQ;IACOC,iBAAiB,GAkB9B1B,KAAK,CAlBP2B,aAAa;IACbC,cAAc,GAiBZ5B,KAAK,CAjBP4B,cAAc;IACdC,MAAM,GAgBJ7B,KAAK,CAhBP6B,MAAM;IACNC,OAAO,GAeL9B,KAAK,CAfP8B,OAAO;IACPC,QAAQ,GAcN/B,KAAK,CAdP+B,QAAQ;IACRC,mBAAmB,GAajBhC,KAAK,CAbPgC,mBAAmB;IAAA,oBAajBhC,KAAK,CAZPiC,UAAU;IAAVA,UAAU,kCAAGC,kBAAU,CAACC,OAAO;IAC/BC,iBAAiB,GAWfpC,KAAK,CAXPoC,iBAAiB;IACjBC,sBAAsB,GAUpBrC,KAAK,CAVPqC,sBAAsB;IAAA,oBAUpBrC,KAAK,CATPsC,UAAU;IAAVA,UAAU,kCAAG,KAAK;IAAA,sBAShBtC,KAAK,CARPuC,YAAY;IAAEC,gBAAgB,oCAAGzC,qBAAqB;IAAA,iBAQpDC,KAAK,CAPPnB,OAAO;IAAE4D,WAAW,+BAAGhC,cAAc;IAAA,mBAOnCT,KAAK,CANP0C,SAAS;IAATA,SAAS,iCAAG,mBAAmB;IAAA,kBAM7B1C,KAAK,CALPQ,QAAQ;IAARA,QAAQ,gCAAGmC,uBAAe;IAAA,cAKxB3C,KAAK,CAJP4C,IAAI;IAAJA,IAAI,4BAAG,qCAAC,0BAAY;MAAC,MAAM,EAAE/B;IAAO,EAAG;IAAA,wBAIrCb,KAAK,CAHP6C,sBAAsB;IAAtBA,sBAAsB,sCAAG,CAAC;IAAA,wBAGxB7C,KAAK,CAFP8C,gBAAgB;IAAhBA,gBAAgB,sCAAG,IAAI;IACpBC,SAAS,0CACV/C,KAAK;EAET,IAAIgD,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;IAC1CzD,qBAAqB,CAACgD,WAAW,CAAC;EACpC;EAEA,IAAMU,YAAY,GAAGxC,KAAK,CAACyC,MAAM,CAAmB,IAAI,CAAC;EACzD,IAAMC,YAAY,GAAG1C,KAAK,CAACyC,MAAM,CAAiB,IAAI,CAAC;EACvD,IAAME,WAAW,GAAG3C,KAAK,CAACyC,MAAM,CAAoB,IAAI,CAAC;EAEzD,uBAAoDzC,KAAK,CAACC,QAAQ,CAEhE,CAAC,CAAC,CAAC;IAAA;IAFE2C,kBAAkB;IAAEC,qBAAqB;EAGhD,uBAAsD7C,KAAK,CAACC,QAAQ,CAClEZ,KAAK,CAACH,KAAK,KAAK4D,SAAS,CAC1B;IAAA;IAFMC,mBAAmB;IAAEC,sBAAsB;EAGlD,uBAAoChD,KAAK,CAACC,QAAQ,CAAC,EAAE,CAAC;IAAA;IAA/CL,UAAU;IAAEqD,aAAa;EAChC,uBAAkDjD,KAAK,CAACC,QAAQ,iBAC9DZ,KAAK,CAACH,KAAK,uDAAIG,KAAK,CAAC6D,YAAY,CAClC;IAAA;IAFMC,iBAAiB;IAAEC,oBAAoB;EAG9C,wBAA0CpD,KAAK,CAACC,QAAQ,CAAC,EAAE,CAAC;IAAA;IAArDoD,aAAa;IAAEC,gBAAgB;EACtC,wBAA8CtD,KAAK,CAACC,QAAQ,CAE1D6C,SAAS,CAAC;IAAA;IAFLS,eAAe;IAAEC,kBAAkB;EAG1C,wBAA8BxD,KAAK,CAACC,QAAQ,CAAC6B,WAAW,CAAC;IAAA;IAAlD5D,OAAO;IAAEuF,UAAU;EAC1B,wBAAsDzD,KAAK,CAACC,QAAQ,CAElER,iBAAiB,CAACqC,WAAW,mBAAEzC,KAAK,CAACH,KAAK,yDAAIG,KAAK,CAAC6D,YAAY,CAAC,CAAC;IAAA;IAF7DQ,mBAAmB;IAAEC,sBAAsB;EAIlD3D,KAAK,CAAC4D,SAAS,CAAC,YAAM;IACpBZ,sBAAsB,CAAC3D,KAAK,CAACH,KAAK,KAAK4D,SAAS,CAAC;IACjDM,oBAAoB,CAClB,UAACD,iBAAiB;MAAA;MAAA,wBAAK9D,KAAK,CAACH,KAAK,yDAAIiE,iBAAiB;IAAA,EACxD;EACH,CAAC,EAAE,CAAC9D,KAAK,CAACH,KAAK,CAAC,CAAC;EAEjB,IAAA2E,oDAAyB,EAAC,YAAM;IAC9B,IAAIV,iBAAiB,KAAKL,SAAS,EAAE;MAAA;MACnC,IAAMgB,MAAK,GAAG,IAAIC,KAAK,CAAC,QAAQ,EAAE;QAAEC,OAAO,EAAE;MAAK,CAAC,CAAC;MAEpD,wBAAArB,WAAW,CAACsB,OAAO,yDAAnB,qBAAqBC,aAAa,CAACJ,MAAK,CAAC;IAC3C;EACF,CAAC,EAAE,CAACX,iBAAiB,CAAC,CAAC;EAEvB,IAAMgB,QAAQ,GAAGnE,KAAK,CAACoE,OAAO,CAAC,YAAM;IACnC,IAAI,CAAClG,OAAO,CAACE,MAAM,EAAE;MACnB,OAAO,IAAI;IACb;IAEA,OAAOsF,mBAAmB,KAAKZ,SAAS,GACpC5E,OAAO,CAACwF,mBAAmB,CAAC,GAC5BZ,SAAS;EACf,CAAC,EAAE,CAAC5E,OAAO,EAAEwF,mBAAmB,CAAC,CAAC;EAElC,IAAMW,gBAAgB,GAAGrE,KAAK,CAACoE,OAAO,CACpC;IAAA,OACE,IAAAE,sBAAU,EACRpE,MAAM,IAAI,cAAc,EACxBA,MAAM,IACJgC,sBAAsB,KAAK,CAAC,KAC3BqB,eAAe,aAAfA,eAAe,eAAfA,eAAe,CAAEgB,QAAQ,CAAC,KAAK,CAAC,GAC7B,gBAAgB,GAChB,kBAAkB,CAAC,CAC1B;EAAA,GACH,CAACrC,sBAAsB,EAAEhC,MAAM,EAAEqD,eAAe,CAAC,CAClD;EAED,IAAMiB,kBAAkB,GAAGxE,KAAK,CAACyE,WAAW,CAAC,YAAM;IACjDnB,gBAAgB,CAAC,EAAE,CAAC;EACtB,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMoB,eAAe,GAAG1E,KAAK,CAACyE,WAAW,CAAC,UAACE,KAAa,EAAqB;IAAA,IAAnBC,MAAM,uEAAG,KAAK;IACtE,IAAMC,QAAQ,GAAGnC,YAAY,CAACuB,OAAO;IACrC,IAAMhF,IAAI,GAAG4F,QAAQ,GAAIA,QAAQ,CAAC/D,QAAQ,CAAC6D,KAAK,CAAC,GAAmB,IAAI;IAExE,IAAI,CAAC1F,IAAI,IAAI,CAAC4F,QAAQ,EAAE;MACtB;IACF;IAEA,IAAMC,cAAc,GAAGD,QAAQ,CAACE,YAAY;IAC5C,IAAMC,SAAS,GAAGH,QAAQ,CAACG,SAAS;IACpC,IAAMC,OAAO,GAAGhG,IAAI,CAACiG,SAAS;IAC9B,IAAMC,UAAU,GAAGlG,IAAI,CAAC8F,YAAY;IAEpC,IAAIH,MAAM,EAAE;MACVC,QAAQ,CAACG,SAAS,GAAGC,OAAO,GAAGH,cAAc,GAAG,CAAC,GAAGK,UAAU,GAAG,CAAC;IACpE,CAAC,MAAM,IAAIF,OAAO,GAAGE,UAAU,GAAGL,cAAc,GAAGE,SAAS,EAAE;MAC5DH,QAAQ,CAACG,SAAS,GAAGC,OAAO,GAAGH,cAAc,GAAGK,UAAU;IAC5D,CAAC,MAAM,IAAIF,OAAO,GAAGD,SAAS,EAAE;MAC9BH,QAAQ,CAACG,SAAS,GAAGC,OAAO;IAC9B;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMG,YAAY,GAAGpF,KAAK,CAACyE,WAAW,CACpC,UAACE,KAAa,EAAK;IAAA;IACjB,OAAOA,KAAK,IAAI,CAAC,IAAIA,KAAK,uBAAIzG,OAAO,CAACE,MAAM,6DAAI,CAAC,CAAC;EACpD,CAAC,EACD,CAACF,OAAO,CAACE,MAAM,CAAC,CACjB;EAED,IAAMiH,kBAAkB,GAAGrF,KAAK,CAACyE,WAAW,CAC1C,UAACE,KAAyB,EAAsB;IAAA;IAAA,IAApBW,QAAQ,uEAAG,IAAI;IACzC,IACEX,KAAK,KAAK7B,SAAS,IACnB6B,KAAK,GAAG,CAAC,IACTA,KAAK,GAAG,qBAACzG,OAAO,CAACE,MAAM,+DAAI,CAAC,IAAI,CAAC,EACjC;MACA;IACF;IAEA,IAAME,MAAM,GAAGJ,OAAO,CAACyG,KAAK,CAAC;IAE7B,IAAIrG,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEE,QAAQ,EAAE;MACpB;IACF;IAEA,IAAI8G,QAAQ,EAAE;MACZZ,eAAe,CAACC,KAAK,CAAC;IACxB;;IAEA;IACA9B,qBAAqB,CAAC,UAACD,kBAAkB;MAAA,OACvCA,kBAAkB,KAAK+B,KAAK,GAAGA,KAAK,GAAG/B,kBAAkB;IAAA,EAC1D;EACH,CAAC,EACD,CAAC1E,OAAO,EAAEwG,eAAe,CAAC,CAC3B;EAED,IAAMa,eAAe,GAAGvF,KAAK,CAACyE,WAAW,CAAC,YAAM;IAC9C,OAAO/B,YAAY,CAACuB,OAAO,KAAK,IAAI;EACtC,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMuB,eAAe,GAAGxF,KAAK,CAACyE,WAAW,CACvC,UAACgB,GAAW,EAAK;IACf,IAAMC,SAAS,GAAGrC,aAAa,GAAGoC,GAAG;IAErC,IAAME,WAAW,GAAGzH,OAAO,CAACG,SAAS,CAAC,UAACC,MAAM,EAAK;MAChD,OAAO,IAAAsH,2BAAoB,EAACtH,MAAM,CAACuH,KAAK,CAAC,CACtCC,WAAW,EAAE,CACbvB,QAAQ,CAACmB,SAAS,CAAC;IACxB,CAAC,CAAC;IAEF,IAAIC,WAAW,KAAK7C,SAAS,IAAI6C,WAAW,GAAG,CAAC,CAAC,EAAE;MACjDN,kBAAkB,CAACM,WAAW,CAAC;IACjC;IAEArC,gBAAgB,CAACoC,SAAS,CAAC;EAC7B,CAAC,EACD,CAACL,kBAAkB,EAAEhC,aAAa,EAAEnF,OAAO,CAAC,CAC7C;EAED,IAAM6H,KAAK,GAAG/F,KAAK,CAACyE,WAAW,CAAC,YAAM;IACpCD,kBAAkB,EAAE;IAEpBvB,aAAa,CAAC,EAAE,CAAC;IACjB9C,SAAS,CAAC,KAAK,CAAC;IAChB0C,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzBY,UAAU,CAAC3B,WAAW,CAAC;IACvBX,OAAO,aAAPA,OAAO,uBAAPA,OAAO,EAAI;EACb,CAAC,EAAE,CAACA,OAAO,EAAEW,WAAW,EAAE0C,kBAAkB,CAAC,CAAC;EAE9C,IAAMwB,aAAa,GAAGhG,KAAK,CAACyE,WAAW,CAAC,YAAM;IAC5C,IAAI7B,kBAAkB,KAAKE,SAAS,IAAIsC,YAAY,CAACxC,kBAAkB,CAAC,EAAE;MACxE,IAAM3D,IAAI,GAAGf,OAAO,CAAC0E,kBAAkB,CAAC;MAExCQ,oBAAoB,CAACnE,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEC,KAAK,CAAC;MACjC6G,KAAK,EAAE;IACT;EACF,CAAC,EAAE,CAACA,KAAK,EAAEnD,kBAAkB,EAAEwC,YAAY,EAAElH,OAAO,CAAC,CAAC;EAEtD,IAAM+H,IAAI,GAAGjG,KAAK,CAACyE,WAAW,CAAC,YAAM;IACnCtE,SAAS,CAAC,IAAI,CAAC;IACf0C,qBAAqB,CAACa,mBAAmB,CAAC;IAE1C,IAAI,OAAOxC,MAAM,KAAK,UAAU,EAAE;MAChCA,MAAM,EAAE;IACV;EACF,CAAC,EAAE,CAACA,MAAM,EAAEwC,mBAAmB,CAAC,CAAC;EAEjC1D,KAAK,CAAC4D,SAAS,CAAC,YAAM;IACpB,IACE1D,MAAM,IACNwD,mBAAmB,KAAKZ,SAAS,IACjCsC,YAAY,CAAC1B,mBAAmB,CAAC,EACjC;MACAgB,eAAe,CAAChB,mBAAmB,EAAE,IAAI,CAAC;IAC5C;EACF,CAAC,EAAE,CAAC0B,YAAY,EAAElF,MAAM,EAAEwE,eAAe,EAAEhB,mBAAmB,CAAC,CAAC;EAEhE,IAAMwC,MAAM,GAAGlG,KAAK,CAACyE,WAAW,CAAC,YAAM;IAAA;IACrCsB,KAAK,EAAE;IACP,IAAMjC,KAAK,GAAG,IAAIC,KAAK,CAAC,MAAM,CAAC;IAC/B,yBAAApB,WAAW,CAACsB,OAAO,0DAAnB,sBAAqBC,aAAa,CAACJ,KAAK,CAAC;EAC3C,CAAC,EAAE,CAACiC,KAAK,CAAC,CAAC;EAEX,IAAMI,kBAAkB,GAAGnG,KAAK,CAACyE,WAAW,CAAC,YAAM;IACjD5B,qBAAqB,CAAC,CAAC,CAAC,CAAC;EAC3B,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMuD,OAAO,GAAGpG,KAAK,CAACyE,WAAW,CAAC,YAAM;IAAA;IACtC,IAAMX,KAAK,GAAG,IAAIC,KAAK,CAAC,OAAO,CAAC;IAChC,yBAAApB,WAAW,CAACsB,OAAO,0DAAnB,sBAAqBC,aAAa,CAACJ,KAAK,CAAC;EAC3C,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMuC,OAAO,GAAGrG,KAAK,CAACyE,WAAW,CAAC,YAAM;IACtC,IAAIvE,MAAM,EAAE;MACV6F,KAAK,EAAE;IACT,CAAC,MAAM;MACLE,IAAI,EAAE;IACR;EACF,CAAC,EAAE,CAACF,KAAK,EAAEE,IAAI,EAAE/F,MAAM,CAAC,CAAC;EAEzB,IAAMoG,WAAW,GAAGtG,KAAK,CAACoE,OAAO,CAC/B;IAAA,OAAM,IAAAmC,eAAQ,EAAC/B,kBAAkB,EAAE,IAAI,CAAC;EAAA,GACxC,CAACA,kBAAkB,CAAC,CACrB;EAED,IAAMgC,WAAW,GAAGxG,KAAK,CAACyE,WAAW,CACnC,UAACgC,IAAqB,EAAK;IACzB,IAAI9B,KAAK,GAAG/B,kBAAkB;IAE9B,IAAI6D,IAAI,KAAK,MAAM,EAAE;MACnB,IAAMC,SAAS,GAAGzI,cAAc,CAACC,OAAO,EAAEyG,KAAK,CAAC;MAChDA,KAAK,GAAG+B,SAAS,KAAK,CAAC,CAAC,GAAGzI,cAAc,CAACC,OAAO,CAAC,GAAGwI,SAAS,CAAC,CAAC;IAClE,CAAC,MAAM,IAAID,IAAI,KAAK,MAAM,EAAE;MAC1B,IAAME,WAAW,GAAGlI,eAAe,CAACP,OAAO,EAAEyG,KAAK,CAAC;MACnDA,KAAK,GAAGgC,WAAW,KAAK,CAAC,CAAC,GAAGlI,eAAe,CAACP,OAAO,CAAC,GAAGyI,WAAW,CAAC,CAAC;IACvE;;IAEAtB,kBAAkB,CAACV,KAAK,CAAC;EAC3B,CAAC,EACD,CAACU,kBAAkB,EAAEzC,kBAAkB,EAAE1E,OAAO,CAAC,CAClD;EAED8B,KAAK,CAAC4D,SAAS,CAAC,YAAM;IAAA;IACpB,IAAM1E,KAAK,6BAAGG,KAAK,CAACH,KAAK,yDAAIiE,iBAAiB,yCAAI9D,KAAK,CAAC6D,YAAY;IAEpE,IAAMhF,OAAO,GACXyD,UAAU,IAAI/B,UAAU,KAAKkD,SAAS,GAClCnD,MAAM,CAACmC,WAAW,EAAElC,UAAU,EAAEC,QAAQ,CAAC,GACzCiC,WAAW;IAEjB2B,UAAU,CAACvF,OAAO,CAAC;IACnByF,sBAAsB,CAAClE,iBAAiB,CAACvB,OAAO,EAAEgB,KAAK,CAAC,CAAC;EAC3D,CAAC,EAAE,CACDW,QAAQ,EACRD,UAAU,EACVuD,iBAAiB,EACjBrB,WAAW,EACXzC,KAAK,CAAC6D,YAAY,EAClB7D,KAAK,CAACH,KAAK,EACXyC,UAAU,CACX,CAAC;;EAEF;AACF;AACA;AACA;EACE,IAAMiF,YAAY,GAAG5G,KAAK,CAACyE,WAAW,CACpC,UAAClF,CAAqC,EAAK;IAAA;IACzC,6BAAImD,YAAY,CAACuB,OAAO,kDAApB,sBAAsB4C,QAAQ,CAACtH,CAAC,CAACuH,MAAM,CAAS,EAAE;MACpDvH,CAAC,CAACC,cAAc,EAAE;IACpB;EACF,CAAC,EACD,EAAE,CACH;EAED,IAAMuH,oBAAiE,GACrE/G,KAAK,CAACyE,WAAW,CACf,UAAClF,CAAC,EAAK;IACL,IAAMyH,sBAAsB,GAAGvH,iBAAiB,CAC9CvB,OAAO,EACPqB,CAAC,CAAC0H,aAAa,CAAC/H,KAAK,CACtB;IAED,IAAIwE,mBAAmB,KAAKsD,sBAAsB,EAAE;MAClD,IAAI,CAACjE,mBAAmB,EAAE;QACxBY,sBAAsB,CAACqD,sBAAsB,CAAC;MAChD;MACAnG,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGtB,CAAC,CAAC;IACf;EACF,CAAC,EACD,CAACwD,mBAAmB,EAAElC,QAAQ,EAAE3C,OAAO,EAAEwF,mBAAmB,CAAC,CAC9D;EAEH,IAAMwD,cAA4D,GAChElH,KAAK,CAACyE,WAAW,CACf,UAACX,KAAK,EAAK;IACT,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAACS,QAAQ,CAACT,KAAK,CAAC2B,GAAG,CAAC,IAC7DF,eAAe,EAAE,IACjBzB,KAAK,CAACtE,cAAc,EAAE;IAExB,QAAQsE,KAAK,CAAC2B,GAAG;MACf,KAAK,SAAS;QACZF,eAAe,EAAE,IAAIiB,WAAW,CAAC,MAAM,CAAC;QACxC;MACF,KAAK,WAAW;QACdjB,eAAe,EAAE,IAAIiB,WAAW,CAAC,MAAM,CAAC;QACxC;MACF,KAAK,QAAQ;QACXT,KAAK,EAAE;QACP;MACF,KAAK,OAAO;QACVR,eAAe,EAAE,IAAIS,aAAa,EAAE;QACpC;IAAM;EAEZ,CAAC,EACD,CAACT,eAAe,EAAEQ,KAAK,EAAES,WAAW,EAAER,aAAa,CAAC,CACrD;EAEH,IAAMhF,aAAyD,GAC7DhB,KAAK,CAACyE,WAAW,CACf,UAAClF,CAAC,EAAK;IACL,IAAIwB,iBAAiB,EAAE;MACrB,IAAM7C,QAAO,GAAG6C,iBAAiB,CAACxB,CAAC,EAAEuC,WAAW,CAAC;MACjD,IAAI5D,QAAO,EAAE;QACX,IAAImE,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;UAC1C3D,IAAI,CACF,2EAA2E,GACzE,qHAAqH,CACxH;QACH;QACA6E,UAAU,CAACvF,QAAO,CAAC;QACnByF,sBAAsB,CACpBlE,iBAAiB,CAACvB,QAAO,EAAEiF,iBAAiB,CAAC,CAC9C;MACH;IACF,CAAC,MAAM;MACL,IAAMjF,SAAO,GAAGyB,MAAM,CAACmC,WAAW,EAAEvC,CAAC,CAACuH,MAAM,CAAC5H,KAAK,EAAEW,QAAQ,CAAC;MAC7D4D,UAAU,CAACvF,SAAO,CAAC;MACnByF,sBAAsB,CAAClE,iBAAiB,CAACvB,SAAO,EAAEiF,iBAAiB,CAAC,CAAC;IACvE;IACAF,aAAa,CAAC1D,CAAC,CAACuH,MAAM,CAAC5H,KAAK,CAAC;EAC/B,CAAC,EACD,CAACW,QAAQ,EAAEsD,iBAAiB,EAAEpC,iBAAiB,EAAEe,WAAW,CAAC,CAC9D;EAEH,IAAMqF,mBAAmB,GAAGnH,KAAK,CAACyE,WAAW,CAC3C,UAACX,KAA0B,EAAK;IAC9B,IAAIA,KAAK,CAAC2B,GAAG,CAACrH,MAAM,KAAK,CAAC,IAAI0F,KAAK,CAAC2B,GAAG,KAAK,GAAG,EAAE;MAC/CD,eAAe,CAAC1B,KAAK,CAAC2B,GAAG,CAAC;MAC1B;IACF;IAEA,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAClB,QAAQ,CAACT,KAAK,CAAC2B,GAAG,CAAC,IAC7DF,eAAe,EAAE,IACjBzB,KAAK,CAACtE,cAAc,EAAE;IAExB,QAAQsE,KAAK,CAAC2B,GAAG;MACf,KAAK,SAAS;QACZ,IAAIvF,MAAM,EAAE;UACVqF,eAAe,EAAE,IAAIiB,WAAW,CAAC,MAAM,CAAC;QAC1C,CAAC,MAAM;UACLP,IAAI,EAAE;QACR;QACA;MACF,KAAK,WAAW;QACd,IAAI/F,MAAM,EAAE;UACVqF,eAAe,EAAE,IAAIiB,WAAW,CAAC,MAAM,CAAC;QAC1C,CAAC,MAAM;UACLP,IAAI,EAAE;QACR;QACA;MACF,KAAK,QAAQ;QACXF,KAAK,EAAE;QACP;MACF,KAAK,OAAO;MACZ,KAAK,UAAU;MACf,KAAK,GAAG;QACN,IAAI7F,MAAM,EAAE;UACVqF,eAAe,EAAE,IAAIS,aAAa,EAAE;QACtC,CAAC,MAAM;UACLC,IAAI,EAAE;QACR;QACA;IAAM;EAEZ,CAAC,EACD,CACEV,eAAe,EACfQ,KAAK,EACLS,WAAW,EACXhB,eAAe,EACfS,IAAI,EACJ/F,MAAM,EACN8F,aAAa,CACd,CACF;EAED,IAAMoB,iBAAiB,GAAGpH,KAAK,CAACyE,WAAW,CACzC,UAAClF,CAAgC,EAAK;IAAA;IACpC,IAAMoF,KAAK,GAAG0C,KAAK,CAACC,SAAS,CAACC,OAAO,CAACC,IAAI,0BACxCjI,CAAC,CAAC0H,aAAa,CAACQ,UAAU,0DAA1B,sBAA4B3G,QAAQ,EACpCvB,CAAC,CAAC0H,aAAa,CAChB;IACD,IAAM3I,MAAM,GAAGJ,OAAO,CAACyG,KAAK,CAAC;IAE7B,IAAIrG,MAAM,IAAI,CAACA,MAAM,CAACE,QAAQ,EAAE;MAC9BwH,aAAa,EAAE;IACjB;EACF,CAAC,EACD,CAAC9H,OAAO,EAAE8H,aAAa,CAAC,CACzB;EAED,IAAM0B,iBAAiB,GAAG1H,KAAK,CAACyE,WAAW,CACzC,UAAClF,CAAgC,EAAK;IAAA;IACpC8F,kBAAkB,CAChBgC,KAAK,CAACC,SAAS,CAACC,OAAO,CAACC,IAAI,2BAC1BjI,CAAC,CAAC0H,aAAa,CAACQ,UAAU,2DAA1B,uBAA4B3G,QAAQ,EACpCvB,CAAC,CAAC0H,aAAa,CAChB,EACD,KAAK,CACN;EACH,CAAC,EACD,CAAC5B,kBAAkB,CAAC,CACrB;EAED,IAAMzD,YAAY,GAAG5B,KAAK,CAACyE,WAAW,CACpC,UAACnG,MAAmC,EAAEqG,KAAa,EAAK;IACtD,IAAMgD,OAAO,GAAGhD,KAAK,KAAK/B,kBAAkB;IAC5C,IAAMuB,QAAQ,GAAGQ,KAAK,KAAKjB,mBAAmB;IAE9C,OACE,qCAAC,KAAK,CAAC,QAAQ;MAAC,GAAG,YAAKpF,MAAM,CAACY,KAAK;IAAG,GACpC2C,gBAAgB,CAAC;MAChBvD,MAAM,EAANA,MAAM;MACNqJ,OAAO,EAAPA,OAAO;MACP7G,QAAQ,EAAExC,MAAM,CAACuH,KAAK;MACtB1B,QAAQ,EAARA,QAAQ;MACR3F,QAAQ,EAAEF,MAAM,CAACE,QAAQ;MACzB6H,OAAO,EAAEe,iBAAiB;MAC1BQ,WAAW,EAAEtI,gBAAgB;MAC7B;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACAuI,WAAW,EAAEH;IACf,CAAC,CAAC,CACa;EAErB,CAAC,EACD,CACE9E,kBAAkB,EAClBwE,iBAAiB,EACjBM,iBAAiB,EACjB7F,gBAAgB,EAChB6B,mBAAmB,CACpB,CACF;EAED,IAAMoE,eAAe,GAAG9H,KAAK,CAACoE,OAAO,CAAC,YAAM;IAC1C,IAAM2D,sBAAsB,GAC1B,CAAA7J,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEE,MAAM,IAAG,CAAC,GACjBF,OAAO,CAACc,GAAG,CAAC4C,YAAY,CAAC,GAEzB,qCAAC,gBAAO;MAAC,SAAS,EAAC;IAAqB,GAAEG,SAAS,CACpD;IAEH,IAAI,OAAOd,cAAc,KAAK,UAAU,EAAE;MACxC,OAAOA,cAAc,CAAC;QAAE8G,sBAAsB,EAAtBA;MAAuB,CAAC,CAAC;IACnD,CAAC,MAAM;MACL,OAAOA,sBAAsB;IAC/B;EACF,CAAC,EAAE,CAAChG,SAAS,EAAE7D,OAAO,EAAE+C,cAAc,EAAEW,YAAY,CAAC,CAAC;EAEtD,OACE;IACE,SAAS,EAAC,cAAc;IACxB,SAAS,EAAEtB,SAAU;IACrB,KAAK,EAAEM,KAAM;IACb,GAAG,EAAE,IAAAoH,eAAQ,EAACxF,YAAY,EAAEhC,UAAU,CAAE;IACxC,OAAO,EAAEoG;EAAa,GAErB1G,MAAM,IAAIyB,UAAU,GACnB,qCAAC,YAAK,6BACAS,SAAS;IACb,SAAS;IACT,MAAM,EAAE8D,MAAO;IACf,SAAS,EAAE7B,gBAAiB;IAC5B,KAAK,EAAEzE,UAAW;IAClB,SAAS,EAAEsH,cAAe;IAC1B,QAAQ,EAAElG;IACV;IACA;IACA;IAAA;IACA,OAAO,EAAE3B,KAAK,CAACgH,OAAQ;IACvB,MAAM,EAAEjG,MAAO;IACf,KAAK,EAAE6B,IAAK;IACZ,WAAW,EAAEG,SAAS,CAAC6F,WAAY;IACnC,IAAI,EAAE,IAAAC,sCAA8B,EAAC5G,UAAU;EAAE,GACjD,GAEF,qCAAC,4BAAa,6BACRc,SAAS;IACb,eAAa,IAAK;IAClB,OAAO,EAAEiE,OAAQ;IACjB,SAAS,EAAEc,mBAAoB;IAC/B,OAAO,EAAEb,WAAY;IACrB,OAAO,EAAEF,OAAQ;IACjB,MAAM,EAAEF,MAAO;IACf,SAAS,EAAE7B,gBAAiB;IAC5B,KAAK,EAAEpC,IAAK;IACZ,UAAU,EAAEX;EAAW,IAEtB6C,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAE0B,KAAK,CAEnB,EACD;IACE,GAAG,EAAElD,WAAY;IACjB,IAAI,EAAEtC,IAAK;IACX,QAAQ,EAAE0G,oBAAqB;IAC/B,MAAM,EAAE1H,KAAK,CAAC6G,MAAO;IACrB,OAAO,EAAE7G,KAAK,CAAC+G,OAAQ;IACvB,OAAO,EAAE/G,KAAK,CAACgH,OAAQ;IACvB,KAAK,EAAElD,iBAAkB;IACzB,eAAa,IAAK;IAClB,SAAS,EAAC;EAAuB,GAEhCrB,WAAW,CAAC9C,GAAG,CAAC,UAACC,IAAI;IAAA,OACpB;MAAQ,GAAG,YAAKA,IAAI,CAACC,KAAK,CAAG;MAAC,KAAK,EAAED,IAAI,CAACC;IAAM,EAAG;EAAA,CACpD,CAAC,CACK,EACRgB,MAAM,IACL,qCAAC,0CAAoB;IACnB,SAAS,EAAEsC,YAAa;IACxB,SAAS,EAAE/B,cAAe;IAC1B,YAAY,EAAEiC,YAAa;IAC3B,iBAAiB,EAAEc,kBAAmB;IACtC,YAAY,EAAE2C,kBAAmB;IACjC,QAAQ,EAAE/E,QAAS;IACnB,cAAc,EAAEc,sBAAuB;IACvC,SAAS,EAAEC,gBAAiB;IAC5B,WAAW,EAAEd,mBAAoB;IACjC,iBAAiB,EAAEI,iBAAkB;IACrC,sBAAsB,EAAEC,sBAAuB;IAC/C,cAAc,EAAEgB;EAAa,GAE5BoF,eAAe,CAEnB,CACK;AAEZ;;AAEA;AACA;AACA;AACO,IAAMK,YAAY,GAAG,IAAAC,8BAAc,EAACrI,qBAAqB,EAAE;EAChEW,KAAK,EAAE;AACT,CAAC,CAAC;AAAC"}
1
+ {"version":3,"file":"CustomSelect.js","names":["findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","CustomSelectComponent","React","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","sizeY","platform","style","onChange","children","onInputChangeProp","onInputChange","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","SelectType","default","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","defaultFilterFn","icon","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","containerRef","useRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","classNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","onKeyboardInput","key","fullInput","optionIndex","getTitleFromChildren","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","multiRef","placeholder","getFormFieldModeFromSelectType","CustomSelect","withAdaptivity"],"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { SelectMimicry } from \"../SelectMimicry/SelectMimicry\";\nimport { debounce, multiRef, getTitleFromChildren } from \"../../lib/utils\";\nimport { classNames } from \"../../lib/classNames\";\nimport { NativeSelectProps } from \"../NativeSelect/NativeSelect\";\nimport { withAdaptivity } from \"../../hoc/withAdaptivity\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { FormFieldProps } from \"../FormField/FormField\";\nimport { HasPlatform } from \"../../types\";\nimport { Input } from \"../Input/Input\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport {\n defaultFilterFn,\n getFormFieldModeFromSelectType,\n} from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { TrackerOptionsProps } from \"../CustomScrollView/useTrackerVisibility\";\nimport { SelectType } from \"../Select/Select\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport \"./CustomSelect.css\";\n\nconst findIndexAfter = (\n options: CustomSelectOptionInterface[] = [],\n startIndex = -1\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce(\"CustomSelect\");\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n \"Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.\",\n \"error\"\n );\n }\n};\n\nfunction defaultRenderOptionFn({\n option,\n ...props\n}: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (\n e: React.MouseEvent<HTMLElement>\n) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue\n) {\n return (\n options.findIndex((item) => {\n value = typeof item.value === \"number\" ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: CustomSelectProps[\"options\"],\n inputValue: string,\n filterFn: CustomSelectProps[\"filterFn\"]\n) => {\n return typeof filterFn === \"function\"\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>[\"value\"];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectProps\n extends NativeSelectProps,\n HasPlatform,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[]\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (\n option: Partial<CustomSelectOptionInterface>\n ) => string\n ) => boolean);\n popupDirection?: \"top\" | \"bottom\";\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n icon?: React.ReactNode;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: keyof typeof SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nfunction CustomSelectComponent(props: CustomSelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n sizeY,\n platform,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = SelectType.default,\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = \"Ничего не найдено\",\n filterFn = defaultFilterFn,\n icon = <DropdownIcon opened={opened} />,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === \"development\") {\n checkOptionsValueType(optionsProp);\n }\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const selectElRef = React.useRef<HTMLSelectElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<\n number | undefined\n >(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(\n props.value !== undefined\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n props.value ?? props.defaultValue\n );\n const [keyboardInput, setKeyboardInput] = React.useState(\"\");\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<\n number | undefined\n >(findSelectedIndex(optionsProp, props.value ?? props.defaultValue));\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue(\n (nativeSelectValue) => props.value ?? nativeSelectValue\n );\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (options.some(({ value }) => nativeSelectValue === value)) {\n const event = new Event(\"change\", { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined\n ? options[selectedOptionIndex]\n : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n classNames(\n opened && \"Select--open\",\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes(\"top\")\n ? \"Select--pop-up\"\n : \"Select--pop-down\")\n ),\n [dropdownOffsetDistance, opened, popperPlacement]\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput(\"\");\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length]\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (\n index === undefined ||\n index < 0 ||\n index > (options.length ?? 0) - 1\n ) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex\n );\n },\n [options, scrollToElement]\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label)\n .toLowerCase()\n .includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options]\n );\n\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue(\"\");\n setOpened(false);\n setFocusedOptionIndex(-1);\n setOptions(optionsProp);\n onClose?.();\n }, [onClose, optionsProp, resetKeyboardInput]);\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {\n const item = options[focusedOptionIndex];\n\n setNativeSelectValue(item?.value);\n close();\n }\n }, [close, focusedOptionIndex, isValidIndex, options]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === \"function\") {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n React.useEffect(() => {\n if (\n opened &&\n selectedOptionIndex !== undefined &&\n isValidIndex(selectedOptionIndex)\n ) {\n scrollToElement(selectedOptionIndex, true);\n }\n }, [isValidIndex, opened, scrollToElement, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event(\"blur\");\n selectElRef.current?.dispatchEvent(event);\n }, [close]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event(\"focus\");\n selectElRef.current?.dispatchEvent(event);\n }, []);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(\n () => debounce(resetKeyboardInput, 1000),\n [resetKeyboardInput]\n );\n\n const focusOption = React.useCallback(\n (type: \"next\" | \"prev\") => {\n let index = focusedOptionIndex;\n\n if (type === \"next\") {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === \"prev\") {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options]\n );\n\n React.useEffect(() => {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n }, [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n ]);\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback(\n (e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n },\n []\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> =\n React.useCallback(\n (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n },\n [isControlledOutside, onChange, options, selectedOptionIndex]\n );\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> =\n React.useCallback(\n (event) => {\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n areOptionsShown() && focusOption(\"prev\");\n break;\n case \"ArrowDown\":\n areOptionsShown() && focusOption(\"next\");\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused]\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> =\n React.useCallback(\n (e) => {\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === \"development\") {\n warn(\n \"Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет \" +\n \"проигнорировано в v5.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.\"\n );\n }\n setOptions(options);\n setSelectedOptionIndex(\n findSelectedIndex(options, nativeSelectValue)\n );\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp]\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== \" \") {\n onKeyboardInput(event.key);\n return;\n }\n\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n if (opened) {\n areOptionsShown() && focusOption(\"prev\");\n } else {\n open();\n }\n break;\n case \"ArrowDown\":\n if (opened) {\n areOptionsShown() && focusOption(\"next\");\n } else {\n open();\n }\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n case \"Spacebar\":\n case \" \":\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n ]\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectFocused();\n }\n },\n [options, selectFocused]\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n ),\n false\n );\n },\n [focusOptionByIndex]\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ]\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Caption vkuiClass=\"CustomSelect__empty\">{emptyText}</Caption>\n );\n\n if (typeof renderDropdown === \"function\") {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n return (\n <label\n vkuiClass=\"CustomSelect\"\n className={className}\n style={style}\n ref={multiRef(containerRef, getRootRef)}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n vkuiClass={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={props.onClick}\n before={before}\n after={icon}\n placeholder={restProps.placeholder}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n vkuiClass={openedClassNames}\n before={before}\n after={icon}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n observableRefs={scrollBoxRef}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport const CustomSelect = withAdaptivity(CustomSelectComponent, {\n sizeY: true,\n});\n"],"mappings":"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"}
@@ -103,7 +103,10 @@ var Dropdown = function Dropdown(_ref) {
103
103
  setShown(false);
104
104
  }
105
105
  };
106
- (0, _useGlobalEventListener.useGlobalEventListener)(document, "click", handleOutsideClick);
106
+ (0, _useGlobalEventListener.useGlobalEventListener)(document, "click", handleOutsideClick, {
107
+ capture: true,
108
+ passive: true
109
+ });
107
110
  var targetEnterListener = (0, _useEventListener.useEventListener)("mouseenter", handleTargetEnter);
108
111
  var targetClickEvent = (0, _useEventListener.useEventListener)("click", handleTargetClick);
109
112
  var targetLeaveListener = (0, _useEventListener.useEventListener)("mouseleave", handleTargetLeave);
@@ -1 +1 @@
1
- {"version":3,"file":"Dropdown.js","names":["Dropdown","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","style","getRef","onShownChange","restProps","useDOM","document","hoverable","hovered","React","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","styles","patchedPopperRef","useExternRef","usePatchChildrenRef","childRef","child","setShown","value","showTimeout","useTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","useGlobalEventListener","targetEnterListener","useEventListener","targetClickEvent","targetLeaveListener","useEffect","add","className","undefined"],"sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useDOM } from \"../../lib/dom\";\nimport { PopperCommonProps, Popper } from \"../Popper/Popper\";\nimport { FocusTrap } from \"../FocusTrap/FocusTrap\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { usePatchChildrenRef } from \"../../hooks/usePatchChildrenRef\";\nimport \"./Dropdown.css\";\n\nexport interface DropdownProps\n extends Omit<PopperCommonProps, \"arrow\" | \"arrowClassName\"> {\n /**\n * Механика вызова всплывающего окна.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – помимо нажатия, будет показываться/скрывается при наведении/отведении мыши.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что не будет закрываться\n * > при повторном нажатии на целевой элемент. Для закрытия необходимо нажать на область вне целевого элемента\n * > и выпадающего окна.\n */\n action?: \"click\" | \"hover\";\n /**\n * Если передан, то всплывающее окно будет показан/скрыт в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Количество миллисекунд, после которых произойдёт показ всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдёт скрытие всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n hideDelay?: number;\n /**\n * Содержимое всплывающего окна.\n */\n content?: React.ReactNode;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен предоставлять параметры либо `getRootRef`, либо `ref` для получения ссылки на DOM-узел.\n */\n children?: React.ReactElement;\n /**\n * Вызывается при каждом изменении видимости всплывающего окна.\n */\n onShownChange?(shown: boolean): void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Dropdown\n *\n * TODO v5.0.0 Переименовать в `Popover` (см. https://github.com/VKCOM/VKUI/issues/2523)\n */\nexport const Dropdown = ({\n action = \"click\",\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style,\n getRef,\n onShownChange,\n ...restProps\n}: DropdownProps) => {\n const { document } = useDOM();\n\n const hoverable = action === \"hover\";\n const hovered = React.useRef(false);\n const [computedShown, setComputedShown] = React.useState(shownProp || false);\n const [dropdownNode, setPopperNode] = React.useState<HTMLElement | null>(\n null\n );\n\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const styles = {\n ...style,\n \"--popover-safe-zone-padding\": `${offsetDistance}px`,\n } as React.CSSProperties;\n\n const shown = typeof shownProp === \"boolean\" ? shownProp : computedShown;\n\n const patchedPopperRef = useExternRef<HTMLDivElement>(setPopperNode, getRef);\n\n const [childRef, child] = usePatchChildrenRef(children);\n\n const setShown = (value: boolean) => {\n if (typeof shownProp !== \"boolean\") {\n setComputedShown(value);\n }\n typeof onShownChange === \"function\" && onShownChange(value);\n };\n\n const showTimeout = useTimeout(() => setShown(true), showDelay);\n\n const hideTimeout = useTimeout(() => setShown(false), hideDelay);\n\n const handleTargetEnter = () => {\n hovered.current = true;\n hideTimeout.clear();\n showTimeout.set();\n };\n\n const handleTargetClick = () => {\n if (hovered.current && shown) {\n return;\n }\n setShown(!shown);\n };\n\n const handleTargetLeave = () => {\n hovered.current = false;\n showTimeout.clear();\n hideTimeout.set();\n };\n\n const handleContentKeyDownEscape = () => {\n setShown(false);\n };\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (\n dropdownNode &&\n !childRef.current?.contains(e.target as Node) &&\n !dropdownNode.contains(e.target as Node)\n ) {\n setShown(false);\n }\n };\n\n useGlobalEventListener(document, \"click\", handleOutsideClick);\n const targetEnterListener = useEventListener(\"mouseenter\", handleTargetEnter);\n const targetClickEvent = useEventListener(\"click\", handleTargetClick);\n const targetLeaveListener = useEventListener(\"mouseleave\", handleTargetLeave);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n targetClickEvent.add(childRef.current);\n\n if (hoverable) {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }\n }, [\n childRef,\n hoverable,\n targetClickEvent,\n targetEnterListener,\n targetLeaveListener,\n ]);\n\n return (\n <React.Fragment>\n {child}\n {shown && (\n <Popper\n {...restProps}\n vkuiClass=\"Dropdown\"\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={styles}\n renderContent={({ className }) => (\n <FocusTrap\n vkuiClass={className}\n onClose={handleContentKeyDownEscape}\n >\n {content}\n </FocusTrap>\n )}\n onMouseOver={hoverable ? hideTimeout.clear : undefined}\n onMouseOut={hoverable ? handleTargetLeave : undefined}\n />\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Dropdown.js","names":["Dropdown","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","style","getRef","onShownChange","restProps","useDOM","document","hoverable","hovered","React","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","styles","patchedPopperRef","useExternRef","usePatchChildrenRef","childRef","child","setShown","value","showTimeout","useTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","useGlobalEventListener","capture","passive","targetEnterListener","useEventListener","targetClickEvent","targetLeaveListener","useEffect","add","className","undefined"],"sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useDOM } from \"../../lib/dom\";\nimport { PopperCommonProps, Popper } from \"../Popper/Popper\";\nimport { FocusTrap } from \"../FocusTrap/FocusTrap\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { usePatchChildrenRef } from \"../../hooks/usePatchChildrenRef\";\nimport \"./Dropdown.css\";\n\nexport interface DropdownProps\n extends Omit<PopperCommonProps, \"arrow\" | \"arrowClassName\"> {\n /**\n * Механика вызова всплывающего окна.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – помимо нажатия, будет показываться/скрывается при наведении/отведении мыши.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что не будет закрываться\n * > при повторном нажатии на целевой элемент. Для закрытия необходимо нажать на область вне целевого элемента\n * > и выпадающего окна.\n */\n action?: \"click\" | \"hover\";\n /**\n * Если передан, то всплывающее окно будет показан/скрыт в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Количество миллисекунд, после которых произойдёт показ всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдёт скрытие всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n hideDelay?: number;\n /**\n * Содержимое всплывающего окна.\n */\n content?: React.ReactNode;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен предоставлять параметры либо `getRootRef`, либо `ref` для получения ссылки на DOM-узел.\n */\n children?: React.ReactElement;\n /**\n * Вызывается при каждом изменении видимости всплывающего окна.\n */\n onShownChange?(shown: boolean): void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Dropdown\n *\n * TODO v5.0.0 Переименовать в `Popover` (см. https://github.com/VKCOM/VKUI/issues/2523)\n */\nexport const Dropdown = ({\n action = \"click\",\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style,\n getRef,\n onShownChange,\n ...restProps\n}: DropdownProps) => {\n const { document } = useDOM();\n\n const hoverable = action === \"hover\";\n const hovered = React.useRef(false);\n const [computedShown, setComputedShown] = React.useState(shownProp || false);\n const [dropdownNode, setPopperNode] = React.useState<HTMLElement | null>(\n null\n );\n\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const styles = {\n ...style,\n \"--popover-safe-zone-padding\": `${offsetDistance}px`,\n } as React.CSSProperties;\n\n const shown = typeof shownProp === \"boolean\" ? shownProp : computedShown;\n\n const patchedPopperRef = useExternRef<HTMLDivElement>(setPopperNode, getRef);\n\n const [childRef, child] = usePatchChildrenRef(children);\n\n const setShown = (value: boolean) => {\n if (typeof shownProp !== \"boolean\") {\n setComputedShown(value);\n }\n typeof onShownChange === \"function\" && onShownChange(value);\n };\n\n const showTimeout = useTimeout(() => setShown(true), showDelay);\n\n const hideTimeout = useTimeout(() => setShown(false), hideDelay);\n\n const handleTargetEnter = () => {\n hovered.current = true;\n hideTimeout.clear();\n showTimeout.set();\n };\n\n const handleTargetClick = () => {\n if (hovered.current && shown) {\n return;\n }\n setShown(!shown);\n };\n\n const handleTargetLeave = () => {\n hovered.current = false;\n showTimeout.clear();\n hideTimeout.set();\n };\n\n const handleContentKeyDownEscape = () => {\n setShown(false);\n };\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (\n dropdownNode &&\n !childRef.current?.contains(e.target as Node) &&\n !dropdownNode.contains(e.target as Node)\n ) {\n setShown(false);\n }\n };\n\n useGlobalEventListener(document, \"click\", handleOutsideClick, {\n capture: true,\n passive: true,\n });\n const targetEnterListener = useEventListener(\"mouseenter\", handleTargetEnter);\n const targetClickEvent = useEventListener(\"click\", handleTargetClick);\n const targetLeaveListener = useEventListener(\"mouseleave\", handleTargetLeave);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n targetClickEvent.add(childRef.current);\n\n if (hoverable) {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }\n }, [\n childRef,\n hoverable,\n targetClickEvent,\n targetEnterListener,\n targetLeaveListener,\n ]);\n\n return (\n <React.Fragment>\n {child}\n {shown && (\n <Popper\n {...restProps}\n vkuiClass=\"Dropdown\"\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={styles}\n renderContent={({ className }) => (\n <FocusTrap\n vkuiClass={className}\n onClose={handleContentKeyDownEscape}\n >\n {content}\n </FocusTrap>\n )}\n onMouseOver={hoverable ? hideTimeout.clear : undefined}\n onMouseOut={hoverable ? handleTargetLeave : undefined}\n />\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
@@ -142,8 +142,7 @@ var SearchComponent = function SearchComponent(_ref2) {
142
142
  }, placeholder)), isFocused && platform === _platform.IOS && after && (0, _jsxRuntime.createScopedElement)("div", {
143
143
  vkuiClass: "Search__after-width"
144
144
  }, after))), (0, _jsxRuntime.createScopedElement)("div", {
145
- vkuiClass: "Search__after",
146
- onClick: onCancel
145
+ vkuiClass: "Search__after"
147
146
  }, (0, _jsxRuntime.createScopedElement)("div", {
148
147
  vkuiClass: "Search__icons"
149
148
  }, icon && (0, _jsxRuntime.createScopedElement)(_Touch.Touch, {
@@ -151,9 +150,11 @@ var SearchComponent = function SearchComponent(_ref2) {
151
150
  vkuiClass: "Search__icon"
152
151
  }, icon), !!value && (0, _jsxRuntime.createScopedElement)(_Touch.Touch, {
153
152
  onStart: onIconCancelClickStart,
153
+ onClick: onCancel,
154
154
  vkuiClass: "Search__icon"
155
155
  }, platform === _platform.IOS ? (0, _jsxRuntime.createScopedElement)(_icons.Icon16Clear, null) : (0, _jsxRuntime.createScopedElement)(_icons.Icon24Cancel, null))), platform === _platform.IOS && after && (0, _jsxRuntime.createScopedElement)("div", {
156
- vkuiClass: "Search__after-in"
156
+ vkuiClass: "Search__after-in",
157
+ onClick: onCancel
157
158
  }, after))), platform === _platform.VKCOM && (0, _jsxRuntime.createScopedElement)(_Separator.Separator, {
158
159
  vkuiClass: "Search__separator",
159
160
  wide: true