@vkontakte/vkui 5.0.1 → 5.0.3
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.
- package/dist/cjs/components/Alert/Alert.d.ts +3 -3
- package/dist/cjs/components/Alert/Alert.js +13 -9
- package/dist/cjs/components/Alert/Alert.js.map +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/cjs/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/cjs/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cjs/components/Popover/Popover.js +10 -1
- package/dist/cjs/components/Popover/Popover.js.map +1 -1
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js +3 -2
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cjs/components/SplitCol/SplitCol.js +43 -26
- package/dist/cjs/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cjs/components/Tappable/Tappable.d.ts +2 -2
- package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/cjs/components/Tooltip/Tooltip.js +3 -2
- package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cjs/hooks/useEventListener.js +6 -4
- package/dist/cjs/hooks/useEventListener.js.map +1 -1
- package/dist/cjs/hooks/useMediaQueries.js +1 -0
- package/dist/cjs/hooks/useMediaQueries.js.map +1 -1
- package/dist/cjs/lib/adaptivity/types.d.ts +1 -1
- package/dist/cjs/lib/adaptivity/types.js.map +1 -1
- package/dist/cjs/lib/browser.js +0 -1
- package/dist/cjs/lib/browser.js.map +1 -1
- package/dist/cjs/lib/utils.d.ts +0 -1
- package/dist/cjs/lib/utils.js +0 -5
- package/dist/cjs/lib/utils.js.map +1 -1
- package/dist/cjs/shared/breakpoints.d.ts +1 -0
- package/dist/cjs/shared/breakpoints.js +1 -0
- package/dist/cjs/shared/breakpoints.js.map +1 -1
- package/dist/cjs/types.d.ts +6 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/components/Alert/Alert.d.ts +3 -3
- package/dist/components/Alert/Alert.js +13 -9
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/components/Popover/Popover.js +10 -1
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js +4 -3
- package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/components/SplitCol/SplitCol.js +43 -26
- package/dist/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/components/Tappable/Tappable.d.ts +2 -2
- package/dist/components/Tappable/Tappable.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/components/Tooltip/Tooltip.js +3 -2
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components.css +4 -4
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/Alert/Alert.d.ts +3 -3
- package/dist/cssm/components/Alert/Alert.js +13 -9
- package/dist/cssm/components/Alert/Alert.js.map +1 -1
- package/dist/cssm/components/Alert/Alert.module.css +1 -1
- package/dist/cssm/components/Banner/Banner.module.css +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.module.css +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/cssm/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.module.css +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/cssm/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/cssm/components/FocusVisible/FocusVisible.module.css +1 -1
- package/dist/cssm/components/FormField/FormField.module.css +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.module.css +1 -1
- package/dist/cssm/components/Input/Input.module.css +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.module.css +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +1 -1
- package/dist/cssm/components/Popover/Popover.js +10 -1
- package/dist/cssm/components/Popover/Popover.js.map +1 -1
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js +4 -3
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.module.css +1 -1
- package/dist/cssm/components/SplitCol/SplitCol.js +43 -26
- package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cssm/components/SubnavigationButton/SubnavigationButton.module.css +1 -1
- package/dist/cssm/components/Tappable/Tappable.d.ts +2 -2
- package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.module.css +1 -1
- package/dist/cssm/components/Textarea/Textarea.module.css +1 -1
- package/dist/cssm/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/cssm/components/Tooltip/Tooltip.js +3 -2
- package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cssm/components/WriteBar/WriteBar.module.css +1 -1
- package/dist/cssm/hooks/useEventListener.js +6 -4
- package/dist/cssm/hooks/useEventListener.js.map +1 -1
- package/dist/cssm/hooks/useMediaQueries.js +1 -0
- package/dist/cssm/hooks/useMediaQueries.js.map +1 -1
- package/dist/cssm/lib/adaptivity/types.d.ts +1 -1
- package/dist/cssm/lib/adaptivity/types.js.map +1 -1
- package/dist/cssm/lib/browser.js +0 -1
- package/dist/cssm/lib/browser.js.map +1 -1
- package/dist/cssm/lib/utils.d.ts +0 -1
- package/dist/cssm/lib/utils.js +0 -3
- package/dist/cssm/lib/utils.js.map +1 -1
- package/dist/cssm/shared/breakpoints.d.ts +1 -0
- package/dist/cssm/shared/breakpoints.js +1 -0
- package/dist/cssm/shared/breakpoints.js.map +1 -1
- package/dist/cssm/styles/components.css +4 -4
- package/dist/cssm/types.d.ts +6 -0
- package/dist/cssm/types.js.map +1 -1
- package/dist/hooks/useEventListener.js +6 -4
- package/dist/hooks/useEventListener.js.map +1 -1
- package/dist/hooks/useMediaQueries.js +1 -0
- package/dist/hooks/useMediaQueries.js.map +1 -1
- package/dist/lib/adaptivity/types.d.ts +1 -1
- package/dist/lib/adaptivity/types.js.map +1 -1
- package/dist/lib/browser.js +0 -1
- package/dist/lib/browser.js.map +1 -1
- package/dist/lib/utils.d.ts +0 -1
- package/dist/lib/utils.js +0 -3
- package/dist/lib/utils.js.map +1 -1
- package/dist/shared/breakpoints.d.ts +1 -0
- package/dist/shared/breakpoints.js +1 -0
- package/dist/shared/breakpoints.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.js.map +1 -1
- package/dist/vkui.css +4 -4
- package/dist/vkui.css.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomSelect.js","names":["React","SelectMimicry","debounce","multiRef","getTitleFromChildren","classNamesString","CustomSelectOption","Input","DropdownIcon","Footnote","warnOnce","defaultFilterFn","getFormFieldModeFromSelectType","CustomSelectDropdown","useIsomorphicLayoutEffect","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","CustomSelect","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","onInputChange","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","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","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","placeholder"],"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 { classNamesString } from \"../../lib/classNames\";\nimport { NativeSelectProps } from \"../NativeSelect/NativeSelect\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { FormFieldProps } from \"../FormField/FormField\";\nimport { Input } from \"../Input/Input\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\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 styles from \"./CustomSelect.module.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: SelectProps[\"options\"],\n inputValue: string,\n filterFn: SelectProps[\"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 SelectProps\n extends NativeSelectProps,\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?: SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect(props: SelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n 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>(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 classNamesString(\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes(\"top\")\n ? styles[\"CustomSelect--pop-up\"]\n : styles[\"CustomSelect--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 setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (\n ref &&\n selectedOptionIndex !== undefined &&\n isValidIndex(selectedOptionIndex)\n ) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex]\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 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 <Footnote className={styles[\"CustomSelect__empty\"]}>\n {emptyText}\n </Footnote>\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 className={classNamesString(styles[\"CustomSelect\"], 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 className={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-expect-error: TS2322 MouseEventHandler<HTMLSelectElement> !== MouseEventHandler<HTMLInputElement>\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 className={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 className={styles[\"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={setScrollBoxRef}\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomSelect.js","names":["React","SelectMimicry","debounce","multiRef","getTitleFromChildren","classNamesString","CustomSelectOption","Input","DropdownIcon","Footnote","warnOnce","defaultFilterFn","getFormFieldModeFromSelectType","CustomSelectDropdown","useIsomorphicLayoutEffect","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","CustomSelect","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","onInputChange","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","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","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","placeholder"],"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 { classNamesString } from \"../../lib/classNames\";\nimport { NativeSelectProps } from \"../NativeSelect/NativeSelect\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { FormFieldProps } from \"../FormField/FormField\";\nimport { Input } from \"../Input/Input\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\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 styles from \"./CustomSelect.module.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: SelectProps[\"options\"],\n inputValue: string,\n filterFn: SelectProps[\"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 SelectProps\n extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * > ⚠️ В v6 из возвращаемых типов будет удалён `CustomSelectOptionInterface[]`. Для кастомной фильтрации используйте\n * > `filterFn`.\n */\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?: SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect(props: SelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n 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>(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 classNamesString(\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes(\"top\")\n ? styles[\"CustomSelect--pop-up\"]\n : styles[\"CustomSelect--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 setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (\n ref &&\n selectedOptionIndex !== undefined &&\n isValidIndex(selectedOptionIndex)\n ) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex]\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 /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue(\"\");\n setOpened(false);\n setFocusedOptionIndex(-1);\n onClose?.();\n }, [onClose, 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 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 function updateOptionsAndSelectedOptionIndex() {\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 [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n ]\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 e\n ) => {\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\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 // TODO v6 удалить `onInputChangeProp`.\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === \"development\") {\n warn(\n \"Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет \" +\n \"проигнорировано в v6.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 <Footnote className={styles[\"CustomSelect__empty\"]}>\n {emptyText}\n </Footnote>\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 className={classNamesString(styles[\"CustomSelect\"], 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 className={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-expect-error: TS2322 MouseEventHandler<HTMLSelectElement> !== MouseEventHandler<HTMLInputElement>\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 className={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 className={styles[\"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={setScrollBoxRef}\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"],"mappings":"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"}
|
|
@@ -39,7 +39,8 @@ export var CustomSelectOption = function CustomSelectOption(_ref) {
|
|
|
39
39
|
}, styleProp) : styleProp;
|
|
40
40
|
}, [hierarchy, styleProp]);
|
|
41
41
|
if (!!option && process.env.NODE_ENV === "development") {
|
|
42
|
-
|
|
42
|
+
// TODO v6.0.0. Удалить св-во `option`
|
|
43
|
+
warn("Свойство option было добавлено по ошибке и будет удалено в v6.0.0.");
|
|
43
44
|
}
|
|
44
45
|
return /*#__PURE__*/React.createElement(Paragraph, _extends({}, restProps, {
|
|
45
46
|
Component: "div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomSelectOption.js","names":["React","Icon16Done","classNamesString","hasReactNode","Paragraph","Footnote","useAdaptivity","warnOnce","getSizeYClassName","warn","CustomSelectOption","children","hierarchy","hovered","selected","before","after","option","description","disabled","styleProp","style","className","restProps","title","undefined","sizeY","useMemo","process","env","NODE_ENV"],"sources":["../../../src/components/CustomSelectOption/CustomSelectOption.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Icon16Done } from \"@vkontakte/icons\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { hasReactNode } from \"../../lib/utils\";\nimport { Paragraph } from \"../Typography/Paragraph/Paragraph\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { HasRootRef } from \"../../types\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { getSizeYClassName } from \"../../helpers/getSizeYClassName\";\nimport styles from \"./CustomSelectOption.module.css\";\n\nexport interface CustomSelectOptionProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {\n /**\n * Вставляет основной контент.\n */\n option?: any;\n /**\n * Добавляет описание под основным блоком.\n */\n description?: React.ReactNode;\n /**\n * Вставляет элемент в начало блока перед основным контентом.\n * Например, можно передать компонент `Avatar`, `Icon<Name>` или другие изображения.\n */\n before?: React.ReactNode;\n /**\n * Вставляет элемент в конец блока после основного контента.\n * Например, можно передать компонент `Avatar`, `Icon<Name>` или другие изображения.\n */\n after?: React.ReactNode;\n /**\n * Позволяет создавать вложенность.\n */\n hierarchy?: number;\n /**\n * Включает состояние выбранного элемента списка.\n */\n selected?: boolean;\n /**\n * Включает состояние наведения.\n */\n hovered?: boolean;\n /**\n * Включает состояние фокуса.\n */\n focused?: boolean;\n /**\n * Блокирует весь блок.\n */\n disabled?: boolean;\n}\n\nconst warn = warnOnce(\"CustomSelectOption\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelectOption\n */\nexport const CustomSelectOption = ({\n children,\n hierarchy = 0,\n hovered,\n selected,\n before,\n after,\n option,\n description,\n disabled,\n style: styleProp,\n className,\n ...restProps\n}: CustomSelectOptionProps) => {\n const title = typeof children === \"string\" ? children : undefined;\n const { sizeY } = useAdaptivity();\n const style = React.useMemo(\n () =>\n hierarchy > 0\n ? {\n \"--vkui_internal--custom_select_option_hierarchy_level\": hierarchy,\n ...styleProp,\n }\n : styleProp,\n [hierarchy, styleProp]\n );\n\n if (!!option && process.env.NODE_ENV === \"development\") {\n warn(\"Свойство option было добавлено по ошибке и будет удалено в
|
|
1
|
+
{"version":3,"file":"CustomSelectOption.js","names":["React","Icon16Done","classNamesString","hasReactNode","Paragraph","Footnote","useAdaptivity","warnOnce","getSizeYClassName","warn","CustomSelectOption","children","hierarchy","hovered","selected","before","after","option","description","disabled","styleProp","style","className","restProps","title","undefined","sizeY","useMemo","process","env","NODE_ENV"],"sources":["../../../src/components/CustomSelectOption/CustomSelectOption.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Icon16Done } from \"@vkontakte/icons\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { hasReactNode } from \"../../lib/utils\";\nimport { Paragraph } from \"../Typography/Paragraph/Paragraph\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { HasRootRef } from \"../../types\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { getSizeYClassName } from \"../../helpers/getSizeYClassName\";\nimport styles from \"./CustomSelectOption.module.css\";\n\nexport interface CustomSelectOptionProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {\n /**\n * Вставляет основной контент.\n * @deprecated since v6.0.0\n */\n option?: any;\n /**\n * Добавляет описание под основным блоком.\n */\n description?: React.ReactNode;\n /**\n * Вставляет элемент в начало блока перед основным контентом.\n * Например, можно передать компонент `Avatar`, `Icon<Name>` или другие изображения.\n */\n before?: React.ReactNode;\n /**\n * Вставляет элемент в конец блока после основного контента.\n * Например, можно передать компонент `Avatar`, `Icon<Name>` или другие изображения.\n */\n after?: React.ReactNode;\n /**\n * Позволяет создавать вложенность.\n */\n hierarchy?: number;\n /**\n * Включает состояние выбранного элемента списка.\n */\n selected?: boolean;\n /**\n * Включает состояние наведения.\n */\n hovered?: boolean;\n /**\n * Включает состояние фокуса.\n */\n focused?: boolean;\n /**\n * Блокирует весь блок.\n */\n disabled?: boolean;\n}\n\nconst warn = warnOnce(\"CustomSelectOption\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelectOption\n */\nexport const CustomSelectOption = ({\n children,\n hierarchy = 0,\n hovered,\n selected,\n before,\n after,\n option,\n description,\n disabled,\n style: styleProp,\n className,\n ...restProps\n}: CustomSelectOptionProps) => {\n const title = typeof children === \"string\" ? children : undefined;\n const { sizeY } = useAdaptivity();\n const style = React.useMemo(\n () =>\n hierarchy > 0\n ? {\n \"--vkui_internal--custom_select_option_hierarchy_level\": hierarchy,\n ...styleProp,\n }\n : styleProp,\n [hierarchy, styleProp]\n );\n\n if (!!option && process.env.NODE_ENV === \"development\") {\n // TODO v6.0.0. Удалить св-во `option`\n warn(\"Свойство option было добавлено по ошибке и будет удалено в v6.0.0.\");\n }\n\n return (\n <Paragraph\n {...restProps}\n Component=\"div\"\n role=\"option\"\n title={title}\n aria-disabled={disabled}\n aria-selected={selected}\n className={classNamesString(\n styles[\"CustomSelectOption\"],\n getSizeYClassName(styles[\"CustomSelectOption\"], sizeY),\n hovered && !disabled && styles[\"CustomSelectOption--hover\"],\n // Note: пустой класс\n selected && styles[\"CustomSelectOption--selected\"],\n disabled && styles[\"CustomSelectOption--disabled\"],\n hierarchy > 0 && styles[\"CustomSelectOption--hierarchy\"],\n className\n )}\n style={style}\n >\n {hasReactNode(before) && (\n <div className={styles[\"CustomSelectOption__before\"]}>{before}</div>\n )}\n <div className={styles[\"CustomSelectOption__main\"]}>\n <div className={styles[\"CustomSelectOption__children\"]}>{children}</div>\n {hasReactNode(description) && (\n <Footnote className={styles[\"CustomSelectOption__description\"]}>\n {description}\n </Footnote>\n )}\n </div>\n <div className={styles[\"CustomSelectOption__after\"]}>\n {hasReactNode(after) && (\n <div className={styles[\"CustomSelectOption__afterIn\"]}>{after}</div>\n )}\n {selected && (\n <Icon16Done className={styles[\"CustomSelectOption__selectedIcon\"]} />\n )}\n </div>\n </Paragraph>\n );\n};\n"],"mappings":";;;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,gBAAgB,QAAQ,sBAAsB;AACvD,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,SAAS,QAAQ,mCAAmC;AAC7D,SAASC,QAAQ,QAAQ,iCAAiC;AAE1D,SAASC,aAAa,QAAQ,2BAA2B;AACzD,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,iBAAiB,QAAQ,iCAAiC;AA+CnE,IAAMC,IAAI,GAAGF,QAAQ,CAAC,oBAAoB,CAAC;;AAE3C;AACA;AACA;AACA,OAAO,IAAMG,kBAAkB,GAAG,SAArBA,kBAAkB,OAaA;EAAA,IAZ7BC,QAAQ,QAARA,QAAQ;IAAA,sBACRC,SAAS;IAATA,SAAS,+BAAG,CAAC;IACbC,OAAO,QAAPA,OAAO;IACPC,QAAQ,QAARA,QAAQ;IACRC,MAAM,QAANA,MAAM;IACNC,KAAK,QAALA,KAAK;IACLC,MAAM,QAANA,MAAM;IACNC,WAAW,QAAXA,WAAW;IACXC,QAAQ,QAARA,QAAQ;IACDC,SAAS,QAAhBC,KAAK;IACLC,SAAS,QAATA,SAAS;IACNC,SAAS;EAEZ,IAAMC,KAAK,GAAG,OAAOb,QAAQ,KAAK,QAAQ,GAAGA,QAAQ,GAAGc,SAAS;EACjE,qBAAkBnB,aAAa,EAAE;IAAzBoB,KAAK,kBAALA,KAAK;EACb,IAAML,KAAK,GAAGrB,KAAK,CAAC2B,OAAO,CACzB;IAAA,OACEf,SAAS,GAAG,CAAC;MAEP,uDAAuD,EAAEA;IAAS,GAC/DQ,SAAS,IAEdA,SAAS;EAAA,GACf,CAACR,SAAS,EAAEQ,SAAS,CAAC,CACvB;EAED,IAAI,CAAC,CAACH,MAAM,IAAIW,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;IACtD;IACArB,IAAI,CAAC,oEAAoE,CAAC;EAC5E;EAEA,oBACE,oBAAC,SAAS,eACJc,SAAS;IACb,SAAS,EAAC,KAAK;IACf,IAAI,EAAC,QAAQ;IACb,KAAK,EAAEC,KAAM;IACb,iBAAeL,QAAS;IACxB,iBAAeL,QAAS;IACxB,SAAS,EAAEZ,gBAAgB,2BAEzBM,iBAAiB,2BAA+BkB,KAAK,CAAC,EACtDb,OAAO,IAAI,CAACM,QAAQ,mCAAuC;IAC3D;IACAL,QAAQ,sCAA0C,EAClDK,QAAQ,sCAA0C,EAClDP,SAAS,GAAG,CAAC,uCAA2C,EACxDU,SAAS,CACT;IACF,KAAK,EAAED;EAAM,IAEZlB,YAAY,CAACY,MAAM,CAAC,iBACnB;IAAK,SAAS;EAAuC,GAAEA,MAAM,CAC9D,eACD;IAAK,SAAS;EAAqC,gBACjD;IAAK,SAAS;EAAyC,GAAEJ,QAAQ,CAAO,EACvER,YAAY,CAACe,WAAW,CAAC,iBACxB,oBAAC,QAAQ;IAAC,SAAS;EAA4C,GAC5DA,WAAW,CAEf,CACG,eACN;IAAK,SAAS;EAAsC,GACjDf,YAAY,CAACa,KAAK,CAAC,iBAClB;IAAK,SAAS;EAAwC,GAAEA,KAAK,CAC9D,EACAF,QAAQ,iBACP,oBAAC,UAAU;IAAC,SAAS;EAA6C,EACnE,CACG,CACI;AAEhB,CAAC"}
|
|
@@ -11,7 +11,7 @@ export var FocusVisible = function FocusVisible(_ref) {
|
|
|
11
11
|
});
|
|
12
12
|
};
|
|
13
13
|
var styles = {
|
|
14
|
-
"FocusVisible--mode-
|
|
15
|
-
"FocusVisible--mode-
|
|
14
|
+
"FocusVisible--mode-inside": "vkuiFocusVisible--mode-inside",
|
|
15
|
+
"FocusVisible--mode-outside": "vkuiFocusVisible--mode-outside"
|
|
16
16
|
};
|
|
17
17
|
//# sourceMappingURL=FocusVisible.js.map
|
|
@@ -70,10 +70,9 @@ export var PanelHeaderButton = function PanelHeaderButton(_ref2) {
|
|
|
70
70
|
className: classNamesString("vkuiPanelHeaderButton", getPlatformClassName("vkuiPanelHeaderButton", platform), isPrimitive && "vkuiPanelHeaderButton--primitive", !isPrimitive && !isPrimitiveLabel && "vkuiPanelHeaderButton--notPrimitive", className)
|
|
71
71
|
}), isPrimitive ? /*#__PURE__*/React.createElement(ButtonTypography, {
|
|
72
72
|
primary: primary
|
|
73
|
-
}, children) : children, /*#__PURE__*/React.createElement(
|
|
73
|
+
}, children) : children, isPrimitiveLabel ? /*#__PURE__*/React.createElement(ButtonTypography, {
|
|
74
|
+
primary: primary,
|
|
74
75
|
className: "vkuiPanelHeaderButton__label"
|
|
75
|
-
},
|
|
76
|
-
primary: primary
|
|
77
|
-
}, label) : label));
|
|
76
|
+
}, label) : label);
|
|
78
77
|
};
|
|
79
78
|
//# sourceMappingURL=PanelHeaderButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelHeaderButton.js","names":["React","Tappable","getPlatformClassName","classNamesString","warnOnce","usePlatform","getTitleFromChildren","isPrimitiveReactNode","Platform","Text","Title","ButtonTypography","primary","children","platform","IOS","VKCOM","undefined","warn","PanelHeaderButton","label","className","restProps","isPrimitive","isPrimitiveLabel","hoverMode","activeMode","process","env","NODE_ENV","hasAccessibleName","Boolean","href"],"sources":["../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { TappableProps, Tappable } from \"../Tappable/Tappable\";\nimport { getPlatformClassName } from \"../../helpers/getPlatformClassName\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { getTitleFromChildren, isPrimitiveReactNode } from \"../../lib/utils\";\nimport { Platform } from \"../../lib/platform\";\nimport { Text } from \"../Typography/Text/Text\";\nimport { Title } from \"../Typography/Title/Title\";\nimport styles from \"./PanelHeaderButton.module.css\";\n\nexport interface PanelHeaderButtonProps extends Omit<TappableProps, \"label\"> {\n primary?: boolean;\n label?: React.ReactNode;\n}\n\ninterface ButtonTypographyProps extends React.AllHTMLAttributes<HTMLElement> {\n primary?: PanelHeaderButtonProps[\"primary\"];\n}\n\nconst ButtonTypography = ({ primary, children }: ButtonTypographyProps) => {\n const platform = usePlatform();\n\n if (platform === Platform.IOS) {\n return (\n <Title Component=\"span\" level=\"3\" weight={primary ? \"1\" : \"3\"}>\n {children}\n </Title>\n );\n }\n\n return (\n <Text weight={platform === Platform.VKCOM ? undefined : \"2\"}>\n {children}\n </Text>\n );\n};\n\nconst warn = warnOnce(\"PanelHeaderButton\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderButton\n */\nexport const PanelHeaderButton = ({\n children,\n primary = false,\n label,\n className,\n ...restProps\n}: PanelHeaderButtonProps) => {\n const isPrimitive = isPrimitiveReactNode(children);\n const isPrimitiveLabel = isPrimitiveReactNode(label);\n const platform = usePlatform();\n\n let hoverMode;\n let activeMode;\n\n switch (platform) {\n case Platform.IOS:\n hoverMode = \"background\";\n activeMode = \"opacity\";\n break;\n case Platform.VKCOM:\n hoverMode = styles[\"PanelHeaderButton--hover\"];\n activeMode = styles[\"PanelHeaderButton--active\"];\n break;\n default:\n hoverMode = \"background\";\n activeMode = \"background\";\n }\n\n if (process.env.NODE_ENV === \"development\") {\n const hasAccessibleName = Boolean(\n getTitleFromChildren(children) ||\n getTitleFromChildren(label) ||\n restProps[\"aria-label\"] ||\n restProps[\"aria-labelledby\"]\n );\n\n if (!hasAccessibleName) {\n warn(\n \"a11y: У кнопки нет названия, которое может прочитать скринридер, и она недоступна для части пользователей. Замените содержимое на текст или добавьте описание действия с помощью пропа aria-label.\",\n \"error\"\n );\n }\n }\n\n return (\n <Tappable\n {...restProps}\n hoverMode={hoverMode}\n Component={restProps.href ? \"a\" : \"button\"}\n activeEffectDelay={200}\n activeMode={activeMode}\n className={classNamesString(\n styles[\"PanelHeaderButton\"],\n getPlatformClassName(styles[\"PanelHeaderButton\"], platform),\n isPrimitive && styles[\"PanelHeaderButton--primitive\"],\n !isPrimitive &&\n !isPrimitiveLabel &&\n styles[\"PanelHeaderButton--notPrimitive\"],\n className\n )}\n >\n {isPrimitive ? (\n <ButtonTypography primary={primary}>{children}</ButtonTypography>\n ) : (\n children\n )}\n <
|
|
1
|
+
{"version":3,"file":"PanelHeaderButton.js","names":["React","Tappable","getPlatformClassName","classNamesString","warnOnce","usePlatform","getTitleFromChildren","isPrimitiveReactNode","Platform","Text","Title","ButtonTypography","primary","children","platform","IOS","VKCOM","undefined","warn","PanelHeaderButton","label","className","restProps","isPrimitive","isPrimitiveLabel","hoverMode","activeMode","process","env","NODE_ENV","hasAccessibleName","Boolean","href"],"sources":["../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { TappableProps, Tappable } from \"../Tappable/Tappable\";\nimport { getPlatformClassName } from \"../../helpers/getPlatformClassName\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { getTitleFromChildren, isPrimitiveReactNode } from \"../../lib/utils\";\nimport { Platform } from \"../../lib/platform\";\nimport { Text } from \"../Typography/Text/Text\";\nimport { Title } from \"../Typography/Title/Title\";\nimport styles from \"./PanelHeaderButton.module.css\";\n\nexport interface PanelHeaderButtonProps extends Omit<TappableProps, \"label\"> {\n primary?: boolean;\n label?: React.ReactNode;\n}\n\ninterface ButtonTypographyProps extends React.AllHTMLAttributes<HTMLElement> {\n primary?: PanelHeaderButtonProps[\"primary\"];\n}\n\nconst ButtonTypography = ({ primary, children }: ButtonTypographyProps) => {\n const platform = usePlatform();\n\n if (platform === Platform.IOS) {\n return (\n <Title Component=\"span\" level=\"3\" weight={primary ? \"1\" : \"3\"}>\n {children}\n </Title>\n );\n }\n\n return (\n <Text weight={platform === Platform.VKCOM ? undefined : \"2\"}>\n {children}\n </Text>\n );\n};\n\nconst warn = warnOnce(\"PanelHeaderButton\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderButton\n */\nexport const PanelHeaderButton = ({\n children,\n primary = false,\n label,\n className,\n ...restProps\n}: PanelHeaderButtonProps) => {\n const isPrimitive = isPrimitiveReactNode(children);\n const isPrimitiveLabel = isPrimitiveReactNode(label);\n const platform = usePlatform();\n\n let hoverMode;\n let activeMode;\n\n switch (platform) {\n case Platform.IOS:\n hoverMode = \"background\";\n activeMode = \"opacity\";\n break;\n case Platform.VKCOM:\n hoverMode = styles[\"PanelHeaderButton--hover\"];\n activeMode = styles[\"PanelHeaderButton--active\"];\n break;\n default:\n hoverMode = \"background\";\n activeMode = \"background\";\n }\n\n if (process.env.NODE_ENV === \"development\") {\n const hasAccessibleName = Boolean(\n getTitleFromChildren(children) ||\n getTitleFromChildren(label) ||\n restProps[\"aria-label\"] ||\n restProps[\"aria-labelledby\"]\n );\n\n if (!hasAccessibleName) {\n warn(\n \"a11y: У кнопки нет названия, которое может прочитать скринридер, и она недоступна для части пользователей. Замените содержимое на текст или добавьте описание действия с помощью пропа aria-label.\",\n \"error\"\n );\n }\n }\n\n return (\n <Tappable\n {...restProps}\n hoverMode={hoverMode}\n Component={restProps.href ? \"a\" : \"button\"}\n activeEffectDelay={200}\n activeMode={activeMode}\n className={classNamesString(\n styles[\"PanelHeaderButton\"],\n getPlatformClassName(styles[\"PanelHeaderButton\"], platform),\n isPrimitive && styles[\"PanelHeaderButton--primitive\"],\n !isPrimitive &&\n !isPrimitiveLabel &&\n styles[\"PanelHeaderButton--notPrimitive\"],\n className\n )}\n >\n {isPrimitive ? (\n <ButtonTypography primary={primary}>{children}</ButtonTypography>\n ) : (\n children\n )}\n {isPrimitiveLabel ? (\n <ButtonTypography\n primary={primary}\n className={styles[\"PanelHeaderButton__label\"]}\n >\n {label}\n </ButtonTypography>\n ) : (\n label\n )}\n </Tappable>\n );\n};\n"],"mappings":"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"}
|
|
@@ -97,11 +97,20 @@ export var Popover = function Popover(_ref) {
|
|
|
97
97
|
return;
|
|
98
98
|
}
|
|
99
99
|
targetClickEvent.add(childRef.current);
|
|
100
|
+
}, [childRef, targetClickEvent]);
|
|
101
|
+
React.useEffect(function () {
|
|
102
|
+
if (!childRef.current) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
100
105
|
if (hoverable) {
|
|
101
106
|
targetEnterListener.add(childRef.current);
|
|
102
107
|
targetLeaveListener.add(childRef.current);
|
|
103
108
|
}
|
|
104
|
-
|
|
109
|
+
return function () {
|
|
110
|
+
targetEnterListener.remove();
|
|
111
|
+
targetLeaveListener.remove();
|
|
112
|
+
};
|
|
113
|
+
}, [childRef, hoverable, targetEnterListener, targetLeaveListener]);
|
|
105
114
|
return /*#__PURE__*/React.createElement(React.Fragment, null, child, shown && /*#__PURE__*/React.createElement(Popper, _extends({}, restProps, {
|
|
106
115
|
className: classNamesString("vkuiPopover", className),
|
|
107
116
|
targetRef: childRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popover.js","names":["React","useDOM","classNamesString","Popper","FocusTrap","useTimeout","useExternRef","useEventListener","useGlobalEventListener","usePatchChildrenRef","Popover","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","styleProp","style","className","getRef","onShownChange","restProps","document","hoverable","hovered","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","patchedPopperRef","childRef","child","setShown","value","showTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","targetEnterListener","targetClickEvent","targetLeaveListener","useEffect","add","wrapperClassName","undefined"],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useDOM } from \"../../lib/dom\";\nimport { classNamesString } from \"../../lib/classNames\";\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 styles from \"./Popover.module.css\";\n\nexport interface PopoverProps\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/#/Popover\n */\nexport const Popover = ({\n action = \"click\",\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style: styleProp,\n className,\n getRef,\n onShownChange,\n ...restProps\n}: PopoverProps) => {\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 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 className={classNamesString(styles[\"Popover\"], className)}\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n {\n ...styleProp,\n \"--vkui_internal--popover_safe_zone_padding\": `${offsetDistance}px`,\n } as React.CSSProperties\n }\n renderContent={({ className: wrapperClassName }) => (\n <FocusTrap\n className={wrapperClassName}\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":"Popover.js","names":["React","useDOM","classNamesString","Popper","FocusTrap","useTimeout","useExternRef","useEventListener","useGlobalEventListener","usePatchChildrenRef","Popover","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","styleProp","style","className","getRef","onShownChange","restProps","document","hoverable","hovered","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","patchedPopperRef","childRef","child","setShown","value","showTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","targetEnterListener","targetClickEvent","targetLeaveListener","useEffect","add","remove","wrapperClassName","undefined"],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useDOM } from \"../../lib/dom\";\nimport { classNamesString } from \"../../lib/classNames\";\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 styles from \"./Popover.module.css\";\n\nexport interface PopoverProps\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/#/Popover\n */\nexport const Popover = ({\n action = \"click\",\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style: styleProp,\n className,\n getRef,\n onShownChange,\n ...restProps\n}: PopoverProps) => {\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 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 }, [childRef, targetClickEvent]);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n if (hoverable) {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }\n\n return () => {\n targetEnterListener.remove();\n targetLeaveListener.remove();\n };\n }, [childRef, hoverable, targetEnterListener, targetLeaveListener]);\n\n return (\n <React.Fragment>\n {child}\n {shown && (\n <Popper\n {...restProps}\n className={classNamesString(styles[\"Popover\"], className)}\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n {\n ...styleProp,\n \"--vkui_internal--popover_safe_zone_padding\": `${offsetDistance}px`,\n } as React.CSSProperties\n }\n renderContent={({ className: wrapperClassName }) => (\n <FocusTrap\n className={wrapperClassName}\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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"}
|
|
@@ -6,7 +6,8 @@ var _excluded = ["size", "name", "options", "getRootRef", "onChange", "value", "
|
|
|
6
6
|
import * as React from "react";
|
|
7
7
|
import { classNamesString } from "../../lib/classNames";
|
|
8
8
|
import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect";
|
|
9
|
-
import {
|
|
9
|
+
import { noop } from "../../lib/utils";
|
|
10
|
+
import { useId } from "../../hooks/useId";
|
|
10
11
|
import { warnOnce } from "../../lib/warnOnce";
|
|
11
12
|
import { SegmentedControlOption } from "./SegmentedControlOption/SegmentedControlOption";
|
|
12
13
|
import { useAdaptivity } from "../../hooks/useAdaptivity";
|
|
@@ -30,6 +31,7 @@ export var SegmentedControl = function SegmentedControl(_ref) {
|
|
|
30
31
|
children = _ref.children,
|
|
31
32
|
className = _ref.className,
|
|
32
33
|
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
34
|
+
var id = useId();
|
|
33
35
|
var _useAdaptivity = useAdaptivity(),
|
|
34
36
|
sizeY = _useAdaptivity.sizeY;
|
|
35
37
|
var initialValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : (_options$ = options[0]) === null || _options$ === void 0 ? void 0 : _options$.value;
|
|
@@ -47,7 +49,6 @@ export var SegmentedControl = function SegmentedControl(_ref) {
|
|
|
47
49
|
valueLocal = _React$useState4[0],
|
|
48
50
|
updateValueLocal = _React$useState4[1];
|
|
49
51
|
var value = valueProp !== null && valueProp !== void 0 ? valueProp : valueLocal;
|
|
50
|
-
var nameRef = React.useRef(name !== null && name !== void 0 ? name : generateRandomId());
|
|
51
52
|
useIsomorphicLayoutEffect(function () {
|
|
52
53
|
var _activeOptionIdx = options.findIndex(function (option) {
|
|
53
54
|
return option.value === value;
|
|
@@ -86,7 +87,7 @@ export var SegmentedControl = function SegmentedControl(_ref) {
|
|
|
86
87
|
key: "".concat(optionProps.value)
|
|
87
88
|
}, optionProps, {
|
|
88
89
|
className: classNamesString("vkuiSegmentedControl__option", optionClassName),
|
|
89
|
-
name:
|
|
90
|
+
name: name !== null && name !== void 0 ? name : id,
|
|
90
91
|
checked: value === optionProps.value,
|
|
91
92
|
onChange: function onChange() {
|
|
92
93
|
return handleOnChange(optionProps.value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl.js","names":["React","classNamesString","useIsomorphicLayoutEffect","
|
|
1
|
+
{"version":3,"file":"SegmentedControl.js","names":["React","classNamesString","useIsomorphicLayoutEffect","noop","useId","warnOnce","SegmentedControlOption","useAdaptivity","getSizeYClassName","warn","SegmentedControl","size","name","options","getRootRef","onChange","valueProp","value","defaultValue","children","className","restProps","id","sizeY","initialValue","process","env","NODE_ENV","undefined","useState","activeOptionIdx","updateActiveOptionIdx","valueLocal","updateValueLocal","_activeOptionIdx","findIndex","option","translateX","handleOnChange","styles","width","length","transform","WebkitTransform","map","label","optionClassName","optionProps"],"sources":["../../../src/components/SegmentedControl/SegmentedControl.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { noop } from \"../../lib/utils\";\nimport { useId } from \"../../hooks/useId\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { SegmentedControlOption } from \"./SegmentedControlOption/SegmentedControlOption\";\nimport { HasRootRef } from \"../../types\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { getSizeYClassName } from \"../../helpers/getSizeYClassName\";\nimport styles from \"./SegmentedControl.module.css\";\n\nexport type SegmentedControlValue = string | number | undefined;\n\nexport interface SegmentedControlOptionInterface\n extends Omit<React.HTMLAttributes<HTMLElement>, \"label\"> {\n label: React.ReactChild;\n value: SegmentedControlValue;\n}\n\nexport interface SegmentedControlProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\">,\n HasRootRef<HTMLDivElement> {\n options: SegmentedControlOptionInterface[];\n size?: \"m\" | \"l\";\n name?: string;\n onChange?: (value: SegmentedControlValue) => void;\n value?: SegmentedControlValue;\n defaultValue?: SegmentedControlValue;\n}\n\nconst warn = warnOnce(\"SegmentedControl\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SegmentedControl\n */\nexport const SegmentedControl = ({\n size = \"l\",\n name,\n options,\n getRootRef,\n onChange = noop,\n value: valueProp,\n defaultValue,\n children,\n className,\n ...restProps\n}: SegmentedControlProps) => {\n const id = useId();\n\n const { sizeY } = useAdaptivity();\n const initialValue = defaultValue ?? options[0]?.value;\n\n if (process.env.NODE_ENV === \"development\") {\n if (valueProp !== undefined && defaultValue !== undefined) {\n warn(\n \"SegmentedControl должен быть либо управляемым, либо неуправляемым\" +\n \"(укажите либо свойство value, либо свойство defaultValue, но не оба).\",\n \"error\"\n );\n }\n }\n\n const [activeOptionIdx, updateActiveOptionIdx] = React.useState<number>(0);\n const [valueLocal, updateValueLocal] =\n React.useState<SegmentedControlValue>(initialValue);\n\n const value = valueProp ?? valueLocal;\n\n useIsomorphicLayoutEffect(() => {\n const _activeOptionIdx = options.findIndex(\n (option) => option.value === value\n );\n\n if (_activeOptionIdx === -1 && process.env.NODE_ENV === \"development\") {\n warn(\"defaultValue: такого значения нет среди опций!\", \"error\");\n }\n\n updateActiveOptionIdx(_activeOptionIdx);\n }, [value, options]);\n\n const translateX = `translateX(${100 * activeOptionIdx}%)`;\n\n const handleOnChange = (value: SegmentedControlValue) => {\n if (valueProp === undefined) {\n updateValueLocal(value);\n }\n onChange(value);\n };\n\n return (\n <div\n {...restProps}\n className={classNamesString(\n styles[\"SegmentedControl\"],\n getSizeYClassName(styles[\"SegmentedControl\"], sizeY),\n styles[`SegmentedControl--size-${size}`],\n className\n )}\n ref={getRootRef}\n >\n <div role=\"radiogroup\" className={styles[\"SegmentedControl__in\"]}>\n {activeOptionIdx > -1 && (\n <div\n aria-hidden=\"true\"\n className={styles[\"SegmentedControl__slider\"]}\n style={{\n width: `${100 / options.length}%`,\n transform: translateX,\n WebkitTransform: translateX,\n }}\n />\n )}\n {options.map(\n ({ label, className: optionClassName, ...optionProps }) => (\n <SegmentedControlOption\n key={`${optionProps.value}`}\n {...optionProps}\n className={classNamesString(\n styles[\"SegmentedControl__option\"],\n optionClassName\n )}\n name={name ?? id}\n checked={value === optionProps.value}\n onChange={() => handleOnChange(optionProps.value)}\n >\n {label}\n </SegmentedControlOption>\n )\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|