@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":["findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","CustomSelect","React","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","defaultFilterFn","icon","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","containerRef","useRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","classNamesString","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","getTitleFromChildren","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","multiRef","placeholder","getFormFieldModeFromSelectType"],"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":["findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","CustomSelect","React","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","defaultFilterFn","icon","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","containerRef","useRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","classNamesString","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","getTitleFromChildren","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","debounce","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","multiRef","placeholder","getFormFieldModeFromSelectType"],"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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"}
|
|
@@ -47,7 +47,8 @@ var CustomSelectOption = function CustomSelectOption(_ref) {
|
|
|
47
47
|
}, styleProp) : styleProp;
|
|
48
48
|
}, [hierarchy, styleProp]);
|
|
49
49
|
if (!!option && process.env.NODE_ENV === "development") {
|
|
50
|
-
|
|
50
|
+
// TODO v6.0.0. Удалить св-во `option`
|
|
51
|
+
warn("Свойство option было добавлено по ошибке и будет удалено в v6.0.0.");
|
|
51
52
|
}
|
|
52
53
|
return /*#__PURE__*/React.createElement(_Paragraph.Paragraph, (0, _extends2.default)({}, restProps, {
|
|
53
54
|
Component: "div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomSelectOption.js","names":["warn","warnOnce","CustomSelectOption","children","hierarchy","hovered","selected","before","after","option","description","disabled","styleProp","style","className","restProps","title","undefined","useAdaptivity","sizeY","React","useMemo","process","env","NODE_ENV","classNamesString","getSizeYClassName","hasReactNode"],"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":["warn","warnOnce","CustomSelectOption","children","hierarchy","hovered","selected","before","after","option","description","disabled","styleProp","style","className","restProps","title","undefined","useAdaptivity","sizeY","React","useMemo","process","env","NODE_ENV","classNamesString","getSizeYClassName","hasReactNode"],"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;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAoE;AA+CpE,IAAMA,IAAI,GAAG,IAAAC,kBAAQ,EAAC,oBAAoB,CAAC;;AAE3C;AACA;AACA;AACO,IAAMC,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,qBAAkB,IAAAC,6BAAa,GAAE;IAAzBC,KAAK,kBAALA,KAAK;EACb,IAAMN,KAAK,GAAGO,KAAK,CAACC,OAAO,CACzB;IAAA,OACEjB,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,IAAIa,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;IACtD;IACAxB,IAAI,CAAC,oEAAoE,CAAC;EAC5E;EAEA,oBACE,oBAAC,oBAAS,6BACJe,SAAS;IACb,SAAS,EAAC,KAAK;IACf,IAAI,EAAC,QAAQ;IACb,KAAK,EAAEC,KAAM;IACb,iBAAeL,QAAS;IACxB,iBAAeL,QAAS;IACxB,SAAS,EAAE,IAAAmB,4BAAgB,4BAEzB,IAAAC,oCAAiB,4BAA+BP,KAAK,CAAC,EACtDd,OAAO,IAAI,CAACM,QAAQ,mCAAuC;IAC3D;IACAL,QAAQ,sCAA0C,EAClDK,QAAQ,sCAA0C,EAClDP,SAAS,GAAG,CAAC,uCAA2C,EACxDU,SAAS,CACT;IACF,KAAK,EAAED;EAAM,IAEZ,IAAAc,mBAAY,EAACpB,MAAM,CAAC,iBACnB;IAAK,SAAS;EAAuC,GAAEA,MAAM,CAC9D,eACD;IAAK,SAAS;EAAqC,gBACjD;IAAK,SAAS;EAAyC,GAAEJ,QAAQ,CAAO,EACvE,IAAAwB,mBAAY,EAACjB,WAAW,CAAC,iBACxB,oBAAC,kBAAQ;IAAC,SAAS;EAA4C,GAC5DA,WAAW,CAEf,CACG,eACN;IAAK,SAAS;EAAsC,GACjD,IAAAiB,mBAAY,EAACnB,KAAK,CAAC,iBAClB;IAAK,SAAS;EAAwC,GAAEA,KAAK,CAC9D,EACAF,QAAQ,iBACP,oBAAC,iBAAU;IAAC,SAAS;EAA6C,EACnE,CACG,CACI;AAEhB,CAAC;AAAC"}
|
|
@@ -19,7 +19,7 @@ var FocusVisible = function FocusVisible(_ref) {
|
|
|
19
19
|
};
|
|
20
20
|
exports.FocusVisible = FocusVisible;
|
|
21
21
|
var styles = {
|
|
22
|
-
"FocusVisible--mode-
|
|
23
|
-
"FocusVisible--mode-
|
|
22
|
+
"FocusVisible--mode-inside": "vkuiFocusVisible--mode-inside",
|
|
23
|
+
"FocusVisible--mode-outside": "vkuiFocusVisible--mode-outside"
|
|
24
24
|
};
|
|
25
25
|
//# sourceMappingURL=FocusVisible.js.map
|
|
@@ -78,11 +78,10 @@ var PanelHeaderButton = function PanelHeaderButton(_ref2) {
|
|
|
78
78
|
className: (0, _classNames.classNamesString)("vkuiPanelHeaderButton", (0, _getPlatformClassName.getPlatformClassName)("vkuiPanelHeaderButton", platform), isPrimitive && "vkuiPanelHeaderButton--primitive", !isPrimitive && !isPrimitiveLabel && "vkuiPanelHeaderButton--notPrimitive", className)
|
|
79
79
|
}), isPrimitive ? /*#__PURE__*/React.createElement(ButtonTypography, {
|
|
80
80
|
primary: primary
|
|
81
|
-
}, children) : children, /*#__PURE__*/React.createElement(
|
|
81
|
+
}, children) : children, isPrimitiveLabel ? /*#__PURE__*/React.createElement(ButtonTypography, {
|
|
82
|
+
primary: primary,
|
|
82
83
|
className: "vkuiPanelHeaderButton__label"
|
|
83
|
-
},
|
|
84
|
-
primary: primary
|
|
85
|
-
}, label) : label));
|
|
84
|
+
}, label) : label);
|
|
86
85
|
};
|
|
87
86
|
exports.PanelHeaderButton = PanelHeaderButton;
|
|
88
87
|
//# sourceMappingURL=PanelHeaderButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelHeaderButton.js","names":["ButtonTypography","primary","children","platform","usePlatform","Platform","IOS","VKCOM","undefined","warn","warnOnce","PanelHeaderButton","label","className","restProps","isPrimitive","isPrimitiveReactNode","isPrimitiveLabel","hoverMode","activeMode","process","env","NODE_ENV","hasAccessibleName","Boolean","getTitleFromChildren","href","classNamesString","getPlatformClassName"],"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":["ButtonTypography","primary","children","platform","usePlatform","Platform","IOS","VKCOM","undefined","warn","warnOnce","PanelHeaderButton","label","className","restProps","isPrimitive","isPrimitiveReactNode","isPrimitiveLabel","hoverMode","activeMode","process","env","NODE_ENV","hasAccessibleName","Boolean","getTitleFromChildren","href","classNamesString","getPlatformClassName"],"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":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAkD;AAYlD,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAgB,OAAqD;EAAA,IAA/CC,OAAO,QAAPA,OAAO;IAAEC,QAAQ,QAARA,QAAQ;EAC3C,IAAMC,QAAQ,GAAG,IAAAC,wBAAW,GAAE;EAE9B,IAAID,QAAQ,KAAKE,kBAAQ,CAACC,GAAG,EAAE;IAC7B,oBACE,oBAAC,YAAK;MAAC,SAAS,EAAC,MAAM;MAAC,KAAK,EAAC,GAAG;MAAC,MAAM,EAAEL,OAAO,GAAG,GAAG,GAAG;IAAI,GAC3DC,QAAQ,CACH;EAEZ;EAEA,oBACE,oBAAC,UAAI;IAAC,MAAM,EAAEC,QAAQ,KAAKE,kBAAQ,CAACE,KAAK,GAAGC,SAAS,GAAG;EAAI,GACzDN,QAAQ,CACJ;AAEX,CAAC;AAED,IAAMO,IAAI,GAAG,IAAAC,kBAAQ,EAAC,mBAAmB,CAAC;;AAE1C;AACA;AACA;AACO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiB,QAMA;EAAA,IAL5BT,QAAQ,SAARA,QAAQ;IAAA,sBACRD,OAAO;IAAPA,OAAO,8BAAG,KAAK;IACfW,KAAK,SAALA,KAAK;IACLC,SAAS,SAATA,SAAS;IACNC,SAAS;EAEZ,IAAMC,WAAW,GAAG,IAAAC,2BAAoB,EAACd,QAAQ,CAAC;EAClD,IAAMe,gBAAgB,GAAG,IAAAD,2BAAoB,EAACJ,KAAK,CAAC;EACpD,IAAMT,QAAQ,GAAG,IAAAC,wBAAW,GAAE;EAE9B,IAAIc,SAAS;EACb,IAAIC,UAAU;EAEd,QAAQhB,QAAQ;IACd,KAAKE,kBAAQ,CAACC,GAAG;MACfY,SAAS,GAAG,YAAY;MACxBC,UAAU,GAAG,SAAS;MACtB;IACF,KAAKd,kBAAQ,CAACE,KAAK;MACjBW,SAAS,iCAAqC;MAC9CC,UAAU,kCAAsC;MAChD;IACF;MACED,SAAS,GAAG,YAAY;MACxBC,UAAU,GAAG,YAAY;EAAC;EAG9B,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;IAC1C,IAAMC,iBAAiB,GAAGC,OAAO,CAC/B,IAAAC,2BAAoB,EAACvB,QAAQ,CAAC,IAC5B,IAAAuB,2BAAoB,EAACb,KAAK,CAAC,IAC3BE,SAAS,CAAC,YAAY,CAAC,IACvBA,SAAS,CAAC,iBAAiB,CAAC,CAC/B;IAED,IAAI,CAACS,iBAAiB,EAAE;MACtBd,IAAI,CACF,oMAAoM,EACpM,OAAO,CACR;IACH;EACF;EAEA,oBACE,oBAAC,kBAAQ,6BACHK,SAAS;IACb,SAAS,EAAEI,SAAU;IACrB,SAAS,EAAEJ,SAAS,CAACY,IAAI,GAAG,GAAG,GAAG,QAAS;IAC3C,iBAAiB,EAAE,GAAI;IACvB,UAAU,EAAEP,UAAW;IACvB,SAAS,EAAE,IAAAQ,4BAAgB,2BAEzB,IAAAC,0CAAoB,2BAA8BzB,QAAQ,CAAC,EAC3DY,WAAW,sCAA0C,EACrD,CAACA,WAAW,IACV,CAACE,gBAAgB,yCACwB,EAC3CJ,SAAS;EACT,IAEDE,WAAW,gBACV,oBAAC,gBAAgB;IAAC,OAAO,EAAEd;EAAQ,GAAEC,QAAQ,CAAoB,GAEjEA,QACD,EACAe,gBAAgB,gBACf,oBAAC,gBAAgB;IACf,OAAO,EAAEhB,OAAQ;IACjB,SAAS;EAAqC,GAE7CW,KAAK,CACW,GAEnBA,KACD,CACQ;AAEf,CAAC;AAAC"}
|
|
@@ -105,11 +105,20 @@ var Popover = function Popover(_ref) {
|
|
|
105
105
|
return;
|
|
106
106
|
}
|
|
107
107
|
targetClickEvent.add(childRef.current);
|
|
108
|
+
}, [childRef, targetClickEvent]);
|
|
109
|
+
React.useEffect(function () {
|
|
110
|
+
if (!childRef.current) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
108
113
|
if (hoverable) {
|
|
109
114
|
targetEnterListener.add(childRef.current);
|
|
110
115
|
targetLeaveListener.add(childRef.current);
|
|
111
116
|
}
|
|
112
|
-
|
|
117
|
+
return function () {
|
|
118
|
+
targetEnterListener.remove();
|
|
119
|
+
targetLeaveListener.remove();
|
|
120
|
+
};
|
|
121
|
+
}, [childRef, hoverable, targetEnterListener, targetLeaveListener]);
|
|
113
122
|
return /*#__PURE__*/React.createElement(React.Fragment, null, child, shown && /*#__PURE__*/React.createElement(_Popper.Popper, (0, _extends2.default)({}, restProps, {
|
|
114
123
|
className: (0, _classNames.classNamesString)("vkuiPopover", className),
|
|
115
124
|
targetRef: childRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popover.js","names":["Popover","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","styleProp","style","className","getRef","onShownChange","restProps","useDOM","document","hoverable","hovered","React","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","patchedPopperRef","useExternRef","usePatchChildrenRef","childRef","child","setShown","value","showTimeout","useTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","useGlobalEventListener","targetEnterListener","useEventListener","targetClickEvent","targetLeaveListener","useEffect","add","classNamesString","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":["Popover","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","styleProp","style","className","getRef","onShownChange","restProps","useDOM","document","hoverable","hovered","React","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","patchedPopperRef","useExternRef","usePatchChildrenRef","childRef","child","setShown","value","showTimeout","useTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","useGlobalEventListener","targetEnterListener","useEventListener","targetClickEvent","targetLeaveListener","useEffect","add","remove","classNamesString","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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"}
|
|
@@ -13,6 +13,7 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
13
13
|
var _classNames = require("../../lib/classNames");
|
|
14
14
|
var _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
|
|
15
15
|
var _utils = require("../../lib/utils");
|
|
16
|
+
var _useId = require("../../hooks/useId");
|
|
16
17
|
var _warnOnce = require("../../lib/warnOnce");
|
|
17
18
|
var _SegmentedControlOption = require("./SegmentedControlOption/SegmentedControlOption");
|
|
18
19
|
var _useAdaptivity2 = require("../../hooks/useAdaptivity");
|
|
@@ -38,6 +39,7 @@ var SegmentedControl = function SegmentedControl(_ref) {
|
|
|
38
39
|
children = _ref.children,
|
|
39
40
|
className = _ref.className,
|
|
40
41
|
restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
42
|
+
var id = (0, _useId.useId)();
|
|
41
43
|
var _useAdaptivity = (0, _useAdaptivity2.useAdaptivity)(),
|
|
42
44
|
sizeY = _useAdaptivity.sizeY;
|
|
43
45
|
var initialValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : (_options$ = options[0]) === null || _options$ === void 0 ? void 0 : _options$.value;
|
|
@@ -55,7 +57,6 @@ var SegmentedControl = function SegmentedControl(_ref) {
|
|
|
55
57
|
valueLocal = _React$useState4[0],
|
|
56
58
|
updateValueLocal = _React$useState4[1];
|
|
57
59
|
var value = valueProp !== null && valueProp !== void 0 ? valueProp : valueLocal;
|
|
58
|
-
var nameRef = React.useRef(name !== null && name !== void 0 ? name : (0, _utils.generateRandomId)());
|
|
59
60
|
(0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
|
|
60
61
|
var _activeOptionIdx = options.findIndex(function (option) {
|
|
61
62
|
return option.value === value;
|
|
@@ -94,7 +95,7 @@ var SegmentedControl = function SegmentedControl(_ref) {
|
|
|
94
95
|
key: "".concat(optionProps.value)
|
|
95
96
|
}, optionProps, {
|
|
96
97
|
className: (0, _classNames.classNamesString)("vkuiSegmentedControl__option", optionClassName),
|
|
97
|
-
name:
|
|
98
|
+
name: name !== null && name !== void 0 ? name : id,
|
|
98
99
|
checked: value === optionProps.value,
|
|
99
100
|
onChange: function onChange() {
|
|
100
101
|
return handleOnChange(optionProps.value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl.js","names":["warn","warnOnce","SegmentedControl","size","name","options","getRootRef","onChange","noop","valueProp","value","defaultValue","children","className","restProps","useAdaptivity","sizeY","initialValue","process","env","NODE_ENV","undefined","React","useState","activeOptionIdx","updateActiveOptionIdx","valueLocal","updateValueLocal","
|
|
1
|
+
{"version":3,"file":"SegmentedControl.js","names":["warn","warnOnce","SegmentedControl","size","name","options","getRootRef","onChange","noop","valueProp","value","defaultValue","children","className","restProps","id","useId","useAdaptivity","sizeY","initialValue","process","env","NODE_ENV","undefined","React","useState","activeOptionIdx","updateActiveOptionIdx","valueLocal","updateValueLocal","useIsomorphicLayoutEffect","_activeOptionIdx","findIndex","option","translateX","handleOnChange","classNamesString","getSizeYClassName","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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"}
|
|
@@ -8,16 +8,47 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.useSplitCol = exports.SplitColContext = exports.SplitCol = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
11
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
13
|
var React = _interopRequireWildcard(require("react"));
|
|
14
14
|
var _classNames = require("../../lib/classNames");
|
|
15
15
|
var _getSizeXClassName = require("../../helpers/getSizeXClassName");
|
|
16
16
|
var _getViewWidthClassName = require("../../helpers/getViewWidthClassName");
|
|
17
|
-
var
|
|
17
|
+
var _useAdaptivity3 = require("../../hooks/useAdaptivity");
|
|
18
18
|
var _adaptivity = require("../../lib/adaptivity");
|
|
19
|
-
var
|
|
19
|
+
var _useObjectMemo = require("../../hooks/useObjectMemo");
|
|
20
|
+
var _useMediaQueries = require("../../hooks/useMediaQueries");
|
|
20
21
|
var _excluded = ["children", "width", "maxWidth", "minWidth", "spaced", "animate", "fixed", "style", "autoSpaced", "stretchedOnMobile", "className"];
|
|
22
|
+
function useTransitionAnimate(animateProp) {
|
|
23
|
+
var _useAdaptivity = (0, _useAdaptivity3.useAdaptivity)(),
|
|
24
|
+
viewWidth = _useAdaptivity.viewWidth;
|
|
25
|
+
var _React$useState = React.useState(Boolean(animateProp)),
|
|
26
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
27
|
+
animate = _React$useState2[0],
|
|
28
|
+
setAnimate = _React$useState2[1];
|
|
29
|
+
var mediaQueries = (0, _useMediaQueries.useMediaQueries)();
|
|
30
|
+
React.useEffect(function () {
|
|
31
|
+
if (animateProp !== undefined) {
|
|
32
|
+
setAnimate(animateProp);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (viewWidth !== undefined) {
|
|
36
|
+
setAnimate(viewWidth < _adaptivity.ViewWidth.TABLET);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// eslint-disable-next-line no-restricted-properties
|
|
41
|
+
var listener = function listener() {
|
|
42
|
+
return setAnimate(!mediaQueries.smallTabletPlus.matches);
|
|
43
|
+
};
|
|
44
|
+
listener();
|
|
45
|
+
mediaQueries.smallTabletPlus.addEventListener("change", listener);
|
|
46
|
+
return function () {
|
|
47
|
+
mediaQueries.smallTabletPlus.removeEventListener("change", listener);
|
|
48
|
+
};
|
|
49
|
+
}, [animateProp, viewWidth, mediaQueries]);
|
|
50
|
+
return animate;
|
|
51
|
+
}
|
|
21
52
|
var SplitColContext = /*#__PURE__*/React.createContext({
|
|
22
53
|
colRef: null,
|
|
23
54
|
animate: true
|
|
@@ -36,7 +67,7 @@ var SplitCol = function SplitCol(props) {
|
|
|
36
67
|
maxWidth = props.maxWidth,
|
|
37
68
|
minWidth = props.minWidth,
|
|
38
69
|
spaced = props.spaced,
|
|
39
|
-
|
|
70
|
+
animateProp = props.animate,
|
|
40
71
|
fixed = props.fixed,
|
|
41
72
|
style = props.style,
|
|
42
73
|
autoSpaced = props.autoSpaced,
|
|
@@ -44,28 +75,14 @@ var SplitCol = function SplitCol(props) {
|
|
|
44
75
|
className = props.className,
|
|
45
76
|
restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
|
|
46
77
|
var baseRef = React.useRef(null);
|
|
47
|
-
var
|
|
48
|
-
viewWidth =
|
|
49
|
-
sizeX =
|
|
50
|
-
var
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
window = _useDOM.window;
|
|
56
|
-
React.useEffect(function () {
|
|
57
|
-
if (_animate === undefined) {
|
|
58
|
-
setAnimate(viewWidth !== undefined ? viewWidth < _adaptivity.ViewWidth.TABLET : window.innerWidth < _adaptivity.BREAKPOINTS.SMALL_TABLET);
|
|
59
|
-
} else {
|
|
60
|
-
setAnimate(_animate);
|
|
61
|
-
}
|
|
62
|
-
}, [_animate, viewWidth, window]);
|
|
63
|
-
var contextValue = React.useMemo(function () {
|
|
64
|
-
return {
|
|
65
|
-
colRef: baseRef,
|
|
66
|
-
animate: animate
|
|
67
|
-
};
|
|
68
|
-
}, [baseRef, animate]);
|
|
78
|
+
var _useAdaptivity2 = (0, _useAdaptivity3.useAdaptivity)(),
|
|
79
|
+
viewWidth = _useAdaptivity2.viewWidth,
|
|
80
|
+
sizeX = _useAdaptivity2.sizeX;
|
|
81
|
+
var animate = useTransitionAnimate(animateProp);
|
|
82
|
+
var contextValue = (0, _useObjectMemo.useObjectMemo)({
|
|
83
|
+
colRef: baseRef,
|
|
84
|
+
animate: animate
|
|
85
|
+
});
|
|
69
86
|
return /*#__PURE__*/React.createElement("div", (0, _extends2.default)({}, restProps, {
|
|
70
87
|
style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, style), {}, {
|
|
71
88
|
width: width,
|