@vkontakte/vkui 4.41.0 → 4.42.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cache/.eslintcache +1 -1
- package/.cache/.stylelintcache +1 -1
- package/.cache/.tsbuildinfo +13 -11
- package/.cache/ts/src/components/Checkbox/Checkbox.d.ts +4 -3
- package/dist/cjs/components/Checkbox/Checkbox.d.ts +4 -3
- package/dist/cjs/components/Checkbox/Checkbox.js +12 -2
- package/dist/cjs/components/Checkbox/Checkbox.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.js +7 -3
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/Dropdown/Dropdown.js +4 -1
- package/dist/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/cjs/components/Search/Search.js +4 -3
- package/dist/cjs/components/Search/Search.js.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.js +1 -0
- package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +4 -3
- package/dist/components/Checkbox/Checkbox.js +12 -2
- package/dist/components/Checkbox/Checkbox.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.js +7 -3
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/Dropdown/Dropdown.js +4 -1
- package/dist/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/components/Search/Search.js +4 -3
- package/dist/components/Search/Search.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +1 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/Button/Button.css +1 -1
- package/dist/cssm/components/Checkbox/Checkbox.d.ts +4 -3
- package/dist/cssm/components/Checkbox/Checkbox.js +12 -2
- package/dist/cssm/components/Checkbox/Checkbox.js.map +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/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js +7 -3
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/Dropdown/Dropdown.js +4 -1
- package/dist/cssm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/cssm/components/Search/Search.js +4 -3
- package/dist/cssm/components/Search/Search.js.map +1 -1
- package/dist/cssm/components/Tooltip/Tooltip.js +1 -0
- package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cssm/styles/components.css +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +1 -1
- package/src/components/Button/Button.css +2 -1
- package/src/components/Checkbox/Checkbox.tsx +20 -2
- package/src/components/ChipsSelect/ChipsSelect.tsx +46 -43
- package/src/components/CustomScrollView/CustomScrollView.tsx +6 -1
- package/src/components/CustomSelect/CustomSelect.tsx +2 -1
- package/src/components/Dropdown/Dropdown.tsx +4 -1
- package/src/components/Search/Search.tsx +9 -3
- package/src/components/Tooltip/Tooltip.tsx +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomSelect.js","names":["React","SelectMimicry","debounce","multiRef","getTitleFromChildren","classNames","withAdaptivity","CustomSelectOption","Input","DropdownIcon","Caption","warnOnce","defaultFilterFn","getFormFieldModeFromSelectType","CustomSelectDropdown","SelectType","useIsomorphicLayoutEffect","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","CustomSelectComponent","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","sizeY","platform","style","onChange","children","onInputChangeProp","onInputChange","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","default","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","icon","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","containerRef","useRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","onKeyboardInput","key","fullInput","optionIndex","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","placeholder","CustomSelect"],"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { SelectMimicry } from \"../SelectMimicry/SelectMimicry\";\nimport { debounce, multiRef, getTitleFromChildren } from \"../../lib/utils\";\nimport { classNames } from \"../../lib/classNames\";\nimport { NativeSelectProps } from \"../NativeSelect/NativeSelect\";\nimport { withAdaptivity } from \"../../hoc/withAdaptivity\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { FormFieldProps } from \"../FormField/FormField\";\nimport { HasPlatform } from \"../../types\";\nimport { Input } from \"../Input/Input\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport {\n defaultFilterFn,\n getFormFieldModeFromSelectType,\n} from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { TrackerOptionsProps } from \"../CustomScrollView/useTrackerVisibility\";\nimport { SelectType } from \"../Select/Select\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport \"./CustomSelect.css\";\n\nconst findIndexAfter = (\n options: CustomSelectOptionInterface[] = [],\n startIndex = -1\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce(\"CustomSelect\");\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n \"Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.\",\n \"error\"\n );\n }\n};\n\nfunction defaultRenderOptionFn({\n option,\n ...props\n}: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (\n e: React.MouseEvent<HTMLElement>\n) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue\n) {\n return (\n options.findIndex((item) => {\n value = typeof item.value === \"number\" ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: CustomSelectProps[\"options\"],\n inputValue: string,\n filterFn: CustomSelectProps[\"filterFn\"]\n) => {\n return typeof filterFn === \"function\"\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>[\"value\"];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectProps\n extends NativeSelectProps,\n HasPlatform,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[]\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (\n option: Partial<CustomSelectOptionInterface>\n ) => string\n ) => boolean);\n popupDirection?: \"top\" | \"bottom\";\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n icon?: React.ReactNode;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: keyof typeof SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nfunction CustomSelectComponent(props: CustomSelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n sizeY,\n platform,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = SelectType.default,\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = \"Ничего не найдено\",\n filterFn = defaultFilterFn,\n icon = <DropdownIcon opened={opened} />,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === \"development\") {\n checkOptionsValueType(optionsProp);\n }\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const selectElRef = React.useRef<HTMLSelectElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<\n number | undefined\n >(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(\n props.value !== undefined\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n props.value ?? props.defaultValue\n );\n const [keyboardInput, setKeyboardInput] = React.useState(\"\");\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<\n number | undefined\n >(findSelectedIndex(optionsProp, props.value ?? props.defaultValue));\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue(\n (nativeSelectValue) => props.value ?? nativeSelectValue\n );\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (nativeSelectValue !== undefined) {\n const event = new Event(\"change\", { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined\n ? options[selectedOptionIndex]\n : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n classNames(\n opened && \"Select--open\",\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes(\"top\")\n ? \"Select--pop-up\"\n : \"Select--pop-down\")\n ),\n [dropdownOffsetDistance, opened, popperPlacement]\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput(\"\");\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length]\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (\n index === undefined ||\n index < 0 ||\n index > (options.length ?? 0) - 1\n ) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex\n );\n },\n [options, scrollToElement]\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label)\n .toLowerCase()\n .includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options]\n );\n\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue(\"\");\n setOpened(false);\n setFocusedOptionIndex(-1);\n setOptions(optionsProp);\n onClose?.();\n }, [onClose, optionsProp, resetKeyboardInput]);\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {\n const item = options[focusedOptionIndex];\n\n setNativeSelectValue(item?.value);\n close();\n }\n }, [close, focusedOptionIndex, isValidIndex, options]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === \"function\") {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n React.useEffect(() => {\n if (\n opened &&\n selectedOptionIndex !== undefined &&\n isValidIndex(selectedOptionIndex)\n ) {\n scrollToElement(selectedOptionIndex, true);\n }\n }, [isValidIndex, opened, scrollToElement, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event(\"blur\");\n selectElRef.current?.dispatchEvent(event);\n }, [close]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event(\"focus\");\n selectElRef.current?.dispatchEvent(event);\n }, []);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(\n () => debounce(resetKeyboardInput, 1000),\n [resetKeyboardInput]\n );\n\n const focusOption = React.useCallback(\n (type: \"next\" | \"prev\") => {\n let index = focusedOptionIndex;\n\n if (type === \"next\") {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === \"prev\") {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options]\n );\n\n React.useEffect(() => {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n }, [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n ]);\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback(\n (e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n },\n []\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> =\n React.useCallback(\n (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n },\n [isControlledOutside, onChange, options, selectedOptionIndex]\n );\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> =\n React.useCallback(\n (event) => {\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n areOptionsShown() && focusOption(\"prev\");\n break;\n case \"ArrowDown\":\n areOptionsShown() && focusOption(\"next\");\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused]\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> =\n React.useCallback(\n (e) => {\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === \"development\") {\n warn(\n \"Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет \" +\n \"проигнорировано в v5.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.\"\n );\n }\n setOptions(options);\n setSelectedOptionIndex(\n findSelectedIndex(options, nativeSelectValue)\n );\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp]\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== \" \") {\n onKeyboardInput(event.key);\n return;\n }\n\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n if (opened) {\n areOptionsShown() && focusOption(\"prev\");\n } else {\n open();\n }\n break;\n case \"ArrowDown\":\n if (opened) {\n areOptionsShown() && focusOption(\"next\");\n } else {\n open();\n }\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n case \"Spacebar\":\n case \" \":\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n ]\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectFocused();\n }\n },\n [options, selectFocused]\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n ),\n false\n );\n },\n [focusOptionByIndex]\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ]\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Caption vkuiClass=\"CustomSelect__empty\">{emptyText}</Caption>\n );\n\n if (typeof renderDropdown === \"function\") {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n return (\n <label\n vkuiClass=\"CustomSelect\"\n className={className}\n style={style}\n ref={multiRef(containerRef, getRootRef)}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n vkuiClass={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={props.onClick}\n before={before}\n after={icon}\n placeholder={restProps.placeholder}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n vkuiClass={openedClassNames}\n after={icon}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n observableRefs={scrollBoxRef}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport const CustomSelect = withAdaptivity(CustomSelectComponent, {\n sizeY: true,\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomSelect.js","names":["React","SelectMimicry","debounce","multiRef","getTitleFromChildren","classNames","withAdaptivity","CustomSelectOption","Input","DropdownIcon","Caption","warnOnce","defaultFilterFn","getFormFieldModeFromSelectType","CustomSelectDropdown","SelectType","useIsomorphicLayoutEffect","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","CustomSelectComponent","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","sizeY","platform","style","onChange","children","onInputChangeProp","onInputChange","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","default","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","icon","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","containerRef","useRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","onKeyboardInput","key","fullInput","optionIndex","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","placeholder","CustomSelect"],"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { SelectMimicry } from \"../SelectMimicry/SelectMimicry\";\nimport { debounce, multiRef, getTitleFromChildren } from \"../../lib/utils\";\nimport { classNames } from \"../../lib/classNames\";\nimport { NativeSelectProps } from \"../NativeSelect/NativeSelect\";\nimport { withAdaptivity } from \"../../hoc/withAdaptivity\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { FormFieldProps } from \"../FormField/FormField\";\nimport { HasPlatform } from \"../../types\";\nimport { Input } from \"../Input/Input\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport {\n defaultFilterFn,\n getFormFieldModeFromSelectType,\n} from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { TrackerOptionsProps } from \"../CustomScrollView/useTrackerVisibility\";\nimport { SelectType } from \"../Select/Select\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport \"./CustomSelect.css\";\n\nconst findIndexAfter = (\n options: CustomSelectOptionInterface[] = [],\n startIndex = -1\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce(\"CustomSelect\");\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n \"Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.\",\n \"error\"\n );\n }\n};\n\nfunction defaultRenderOptionFn({\n option,\n ...props\n}: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (\n e: React.MouseEvent<HTMLElement>\n) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue\n) {\n return (\n options.findIndex((item) => {\n value = typeof item.value === \"number\" ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: CustomSelectProps[\"options\"],\n inputValue: string,\n filterFn: CustomSelectProps[\"filterFn\"]\n) => {\n return typeof filterFn === \"function\"\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>[\"value\"];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectProps\n extends NativeSelectProps,\n HasPlatform,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[]\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (\n option: Partial<CustomSelectOptionInterface>\n ) => string\n ) => boolean);\n popupDirection?: \"top\" | \"bottom\";\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n icon?: React.ReactNode;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: keyof typeof SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nfunction CustomSelectComponent(props: CustomSelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n sizeY,\n platform,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = SelectType.default,\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = \"Ничего не найдено\",\n filterFn = defaultFilterFn,\n icon = <DropdownIcon opened={opened} />,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === \"development\") {\n checkOptionsValueType(optionsProp);\n }\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const selectElRef = React.useRef<HTMLSelectElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<\n number | undefined\n >(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(\n props.value !== undefined\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n props.value ?? props.defaultValue\n );\n const [keyboardInput, setKeyboardInput] = React.useState(\"\");\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<\n number | undefined\n >(findSelectedIndex(optionsProp, props.value ?? props.defaultValue));\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue(\n (nativeSelectValue) => props.value ?? nativeSelectValue\n );\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (options.some(({ value }) => nativeSelectValue === value)) {\n const event = new Event(\"change\", { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined\n ? options[selectedOptionIndex]\n : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n classNames(\n opened && \"Select--open\",\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes(\"top\")\n ? \"Select--pop-up\"\n : \"Select--pop-down\")\n ),\n [dropdownOffsetDistance, opened, popperPlacement]\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput(\"\");\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length]\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (\n index === undefined ||\n index < 0 ||\n index > (options.length ?? 0) - 1\n ) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex\n );\n },\n [options, scrollToElement]\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label)\n .toLowerCase()\n .includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options]\n );\n\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue(\"\");\n setOpened(false);\n setFocusedOptionIndex(-1);\n setOptions(optionsProp);\n onClose?.();\n }, [onClose, optionsProp, resetKeyboardInput]);\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {\n const item = options[focusedOptionIndex];\n\n setNativeSelectValue(item?.value);\n close();\n }\n }, [close, focusedOptionIndex, isValidIndex, options]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === \"function\") {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n React.useEffect(() => {\n if (\n opened &&\n selectedOptionIndex !== undefined &&\n isValidIndex(selectedOptionIndex)\n ) {\n scrollToElement(selectedOptionIndex, true);\n }\n }, [isValidIndex, opened, scrollToElement, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event(\"blur\");\n selectElRef.current?.dispatchEvent(event);\n }, [close]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event(\"focus\");\n selectElRef.current?.dispatchEvent(event);\n }, []);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(\n () => debounce(resetKeyboardInput, 1000),\n [resetKeyboardInput]\n );\n\n const focusOption = React.useCallback(\n (type: \"next\" | \"prev\") => {\n let index = focusedOptionIndex;\n\n if (type === \"next\") {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === \"prev\") {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options]\n );\n\n React.useEffect(() => {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n }, [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n ]);\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback(\n (e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n },\n []\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> =\n React.useCallback(\n (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n },\n [isControlledOutside, onChange, options, selectedOptionIndex]\n );\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> =\n React.useCallback(\n (event) => {\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n areOptionsShown() && focusOption(\"prev\");\n break;\n case \"ArrowDown\":\n areOptionsShown() && focusOption(\"next\");\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused]\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> =\n React.useCallback(\n (e) => {\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === \"development\") {\n warn(\n \"Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет \" +\n \"проигнорировано в v5.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.\"\n );\n }\n setOptions(options);\n setSelectedOptionIndex(\n findSelectedIndex(options, nativeSelectValue)\n );\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp]\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== \" \") {\n onKeyboardInput(event.key);\n return;\n }\n\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n if (opened) {\n areOptionsShown() && focusOption(\"prev\");\n } else {\n open();\n }\n break;\n case \"ArrowDown\":\n if (opened) {\n areOptionsShown() && focusOption(\"next\");\n } else {\n open();\n }\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n case \"Spacebar\":\n case \" \":\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n ]\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectFocused();\n }\n },\n [options, selectFocused]\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n ),\n false\n );\n },\n [focusOptionByIndex]\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ]\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Caption vkuiClass=\"CustomSelect__empty\">{emptyText}</Caption>\n );\n\n if (typeof renderDropdown === \"function\") {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n return (\n <label\n vkuiClass=\"CustomSelect\"\n className={className}\n style={style}\n ref={multiRef(containerRef, getRootRef)}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n vkuiClass={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={props.onClick}\n before={before}\n after={icon}\n placeholder={restProps.placeholder}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n vkuiClass={openedClassNames}\n before={before}\n after={icon}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n observableRefs={scrollBoxRef}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport const CustomSelect = withAdaptivity(CustomSelectComponent, {\n sizeY: true,\n});\n"],"mappings":"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"}
|
|
@@ -96,7 +96,10 @@ export var Dropdown = function Dropdown(_ref) {
|
|
|
96
96
|
setShown(false);
|
|
97
97
|
}
|
|
98
98
|
};
|
|
99
|
-
useGlobalEventListener(document, "click", handleOutsideClick
|
|
99
|
+
useGlobalEventListener(document, "click", handleOutsideClick, {
|
|
100
|
+
capture: true,
|
|
101
|
+
passive: true
|
|
102
|
+
});
|
|
100
103
|
var targetEnterListener = useEventListener("mouseenter", handleTargetEnter);
|
|
101
104
|
var targetClickEvent = useEventListener("click", handleTargetClick);
|
|
102
105
|
var targetLeaveListener = useEventListener("mouseleave", handleTargetLeave);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","names":["React","useDOM","Popper","FocusTrap","useTimeout","useExternRef","useEventListener","useGlobalEventListener","usePatchChildrenRef","Dropdown","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","style","getRef","onShownChange","restProps","document","hoverable","hovered","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","styles","patchedPopperRef","childRef","child","setShown","value","showTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","targetEnterListener","targetClickEvent","targetLeaveListener","useEffect","add","className","undefined"],"sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useDOM } from \"../../lib/dom\";\nimport { PopperCommonProps, Popper } from \"../Popper/Popper\";\nimport { FocusTrap } from \"../FocusTrap/FocusTrap\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { usePatchChildrenRef } from \"../../hooks/usePatchChildrenRef\";\nimport \"./Dropdown.css\";\n\nexport interface DropdownProps\n extends Omit<PopperCommonProps, \"arrow\" | \"arrowClassName\"> {\n /**\n * Механика вызова всплывающего окна.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – помимо нажатия, будет показываться/скрывается при наведении/отведении мыши.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что не будет закрываться\n * > при повторном нажатии на целевой элемент. Для закрытия необходимо нажать на область вне целевого элемента\n * > и выпадающего окна.\n */\n action?: \"click\" | \"hover\";\n /**\n * Если передан, то всплывающее окно будет показан/скрыт в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Количество миллисекунд, после которых произойдёт показ всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдёт скрытие всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n hideDelay?: number;\n /**\n * Содержимое всплывающего окна.\n */\n content?: React.ReactNode;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен предоставлять параметры либо `getRootRef`, либо `ref` для получения ссылки на DOM-узел.\n */\n children?: React.ReactElement;\n /**\n * Вызывается при каждом изменении видимости всплывающего окна.\n */\n onShownChange?(shown: boolean): void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Dropdown\n *\n * TODO v5.0.0 Переименовать в `Popover` (см. https://github.com/VKCOM/VKUI/issues/2523)\n */\nexport const Dropdown = ({\n action = \"click\",\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style,\n getRef,\n onShownChange,\n ...restProps\n}: DropdownProps) => {\n const { document } = useDOM();\n\n const hoverable = action === \"hover\";\n const hovered = React.useRef(false);\n const [computedShown, setComputedShown] = React.useState(shownProp || false);\n const [dropdownNode, setPopperNode] = React.useState<HTMLElement | null>(\n null\n );\n\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const styles = {\n ...style,\n \"--popover-safe-zone-padding\": `${offsetDistance}px`,\n } as React.CSSProperties;\n\n const shown = typeof shownProp === \"boolean\" ? shownProp : computedShown;\n\n const patchedPopperRef = useExternRef<HTMLDivElement>(setPopperNode, getRef);\n\n const [childRef, child] = usePatchChildrenRef(children);\n\n const setShown = (value: boolean) => {\n if (typeof shownProp !== \"boolean\") {\n setComputedShown(value);\n }\n typeof onShownChange === \"function\" && onShownChange(value);\n };\n\n const showTimeout = useTimeout(() => setShown(true), showDelay);\n\n const hideTimeout = useTimeout(() => setShown(false), hideDelay);\n\n const handleTargetEnter = () => {\n hovered.current = true;\n hideTimeout.clear();\n showTimeout.set();\n };\n\n const handleTargetClick = () => {\n if (hovered.current && shown) {\n return;\n }\n setShown(!shown);\n };\n\n const handleTargetLeave = () => {\n hovered.current = false;\n showTimeout.clear();\n hideTimeout.set();\n };\n\n const handleContentKeyDownEscape = () => {\n setShown(false);\n };\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (\n dropdownNode &&\n !childRef.current?.contains(e.target as Node) &&\n !dropdownNode.contains(e.target as Node)\n ) {\n setShown(false);\n }\n };\n\n useGlobalEventListener(document, \"click\", handleOutsideClick);\n const targetEnterListener = useEventListener(\"mouseenter\", handleTargetEnter);\n const targetClickEvent = useEventListener(\"click\", handleTargetClick);\n const targetLeaveListener = useEventListener(\"mouseleave\", handleTargetLeave);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n targetClickEvent.add(childRef.current);\n\n if (hoverable) {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }\n }, [\n childRef,\n hoverable,\n targetClickEvent,\n targetEnterListener,\n targetLeaveListener,\n ]);\n\n return (\n <React.Fragment>\n {child}\n {shown && (\n <Popper\n {...restProps}\n vkuiClass=\"Dropdown\"\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={styles}\n renderContent={({ className }) => (\n <FocusTrap\n vkuiClass={className}\n onClose={handleContentKeyDownEscape}\n >\n {content}\n </FocusTrap>\n )}\n onMouseOver={hoverable ? hideTimeout.clear : undefined}\n onMouseOut={hoverable ? handleTargetLeave : undefined}\n />\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropdown.js","names":["React","useDOM","Popper","FocusTrap","useTimeout","useExternRef","useEventListener","useGlobalEventListener","usePatchChildrenRef","Dropdown","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","style","getRef","onShownChange","restProps","document","hoverable","hovered","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","styles","patchedPopperRef","childRef","child","setShown","value","showTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","capture","passive","targetEnterListener","targetClickEvent","targetLeaveListener","useEffect","add","className","undefined"],"sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useDOM } from \"../../lib/dom\";\nimport { PopperCommonProps, Popper } from \"../Popper/Popper\";\nimport { FocusTrap } from \"../FocusTrap/FocusTrap\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { usePatchChildrenRef } from \"../../hooks/usePatchChildrenRef\";\nimport \"./Dropdown.css\";\n\nexport interface DropdownProps\n extends Omit<PopperCommonProps, \"arrow\" | \"arrowClassName\"> {\n /**\n * Механика вызова всплывающего окна.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – помимо нажатия, будет показываться/скрывается при наведении/отведении мыши.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что не будет закрываться\n * > при повторном нажатии на целевой элемент. Для закрытия необходимо нажать на область вне целевого элемента\n * > и выпадающего окна.\n */\n action?: \"click\" | \"hover\";\n /**\n * Если передан, то всплывающее окно будет показан/скрыт в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Количество миллисекунд, после которых произойдёт показ всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдёт скрытие всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n hideDelay?: number;\n /**\n * Содержимое всплывающего окна.\n */\n content?: React.ReactNode;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен предоставлять параметры либо `getRootRef`, либо `ref` для получения ссылки на DOM-узел.\n */\n children?: React.ReactElement;\n /**\n * Вызывается при каждом изменении видимости всплывающего окна.\n */\n onShownChange?(shown: boolean): void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Dropdown\n *\n * TODO v5.0.0 Переименовать в `Popover` (см. https://github.com/VKCOM/VKUI/issues/2523)\n */\nexport const Dropdown = ({\n action = \"click\",\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style,\n getRef,\n onShownChange,\n ...restProps\n}: DropdownProps) => {\n const { document } = useDOM();\n\n const hoverable = action === \"hover\";\n const hovered = React.useRef(false);\n const [computedShown, setComputedShown] = React.useState(shownProp || false);\n const [dropdownNode, setPopperNode] = React.useState<HTMLElement | null>(\n null\n );\n\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const styles = {\n ...style,\n \"--popover-safe-zone-padding\": `${offsetDistance}px`,\n } as React.CSSProperties;\n\n const shown = typeof shownProp === \"boolean\" ? shownProp : computedShown;\n\n const patchedPopperRef = useExternRef<HTMLDivElement>(setPopperNode, getRef);\n\n const [childRef, child] = usePatchChildrenRef(children);\n\n const setShown = (value: boolean) => {\n if (typeof shownProp !== \"boolean\") {\n setComputedShown(value);\n }\n typeof onShownChange === \"function\" && onShownChange(value);\n };\n\n const showTimeout = useTimeout(() => setShown(true), showDelay);\n\n const hideTimeout = useTimeout(() => setShown(false), hideDelay);\n\n const handleTargetEnter = () => {\n hovered.current = true;\n hideTimeout.clear();\n showTimeout.set();\n };\n\n const handleTargetClick = () => {\n if (hovered.current && shown) {\n return;\n }\n setShown(!shown);\n };\n\n const handleTargetLeave = () => {\n hovered.current = false;\n showTimeout.clear();\n hideTimeout.set();\n };\n\n const handleContentKeyDownEscape = () => {\n setShown(false);\n };\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (\n dropdownNode &&\n !childRef.current?.contains(e.target as Node) &&\n !dropdownNode.contains(e.target as Node)\n ) {\n setShown(false);\n }\n };\n\n useGlobalEventListener(document, \"click\", handleOutsideClick, {\n capture: true,\n passive: true,\n });\n const targetEnterListener = useEventListener(\"mouseenter\", handleTargetEnter);\n const targetClickEvent = useEventListener(\"click\", handleTargetClick);\n const targetLeaveListener = useEventListener(\"mouseleave\", handleTargetLeave);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n targetClickEvent.add(childRef.current);\n\n if (hoverable) {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }\n }, [\n childRef,\n hoverable,\n targetClickEvent,\n targetEnterListener,\n targetLeaveListener,\n ]);\n\n return (\n <React.Fragment>\n {child}\n {shown && (\n <Popper\n {...restProps}\n vkuiClass=\"Dropdown\"\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={styles}\n renderContent={({ className }) => (\n <FocusTrap\n vkuiClass={className}\n onClose={handleContentKeyDownEscape}\n >\n {content}\n </FocusTrap>\n )}\n onMouseOver={hoverable ? hideTimeout.clear : undefined}\n onMouseOut={hoverable ? handleTargetLeave : undefined}\n />\n )}\n </React.Fragment>\n );\n};\n"],"mappings":";;;;;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,MAAM;AACf,SAA4BC,MAAM;AAClC,SAASC,SAAS;AAClB,SAASC,UAAU;AACnB,SAASC,YAAY;AACrB,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,mBAAmB;AAC5B;AA+CA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAQ,OAYA;EAAA,uBAXnBC,MAAM;IAANA,MAAM,4BAAG,OAAO;IACTC,SAAS,QAAhBC,KAAK;IAAA,sBACLC,SAAS;IAATA,SAAS,+BAAG,GAAG;IAAA,sBACfC,SAAS;IAATA,SAAS,+BAAG,GAAG;IAAA,2BACfC,cAAc;IAAdA,cAAc,oCAAG,CAAC;IAClBC,OAAO,QAAPA,OAAO;IACPC,QAAQ,QAARA,QAAQ;IACRC,KAAK,QAALA,KAAK;IACLC,MAAM,QAANA,MAAM;IACNC,aAAa,QAAbA,aAAa;IACVC,SAAS;EAEZ,cAAqBpB,MAAM,EAAE;IAArBqB,QAAQ,WAARA,QAAQ;EAEhB,IAAMC,SAAS,GAAGb,MAAM,KAAK,OAAO;EACpC,IAAMc,OAAO,GAAGxB,KAAK,CAACyB,MAAM,CAAC,KAAK,CAAC;EACnC,sBAA0CzB,KAAK,CAAC0B,QAAQ,CAACf,SAAS,IAAI,KAAK,CAAC;IAAA;IAArEgB,aAAa;IAAEC,gBAAgB;EACtC,uBAAsC5B,KAAK,CAAC0B,QAAQ,CAClD,IAAI,CACL;IAAA;IAFMG,YAAY;IAAEC,aAAa;;EAIlC;EACA;EACA,IAAMC,MAAM,mCACPb,KAAK;IACR,6BAA6B,YAAKH,cAAc;EAAI,EAC9B;EAExB,IAAMH,KAAK,GAAG,OAAOD,SAAS,KAAK,SAAS,GAAGA,SAAS,GAAGgB,aAAa;EAExE,IAAMK,gBAAgB,GAAG3B,YAAY,CAAiByB,aAAa,EAAEX,MAAM,CAAC;EAE5E,2BAA0BX,mBAAmB,CAACS,QAAQ,CAAC;IAAA;IAAhDgB,QAAQ;IAAEC,KAAK;EAEtB,IAAMC,QAAQ,GAAG,SAAXA,QAAQ,CAAIC,KAAc,EAAK;IACnC,IAAI,OAAOzB,SAAS,KAAK,SAAS,EAAE;MAClCiB,gBAAgB,CAACQ,KAAK,CAAC;IACzB;IACA,OAAOhB,aAAa,KAAK,UAAU,IAAIA,aAAa,CAACgB,KAAK,CAAC;EAC7D,CAAC;EAED,IAAMC,WAAW,GAAGjC,UAAU,CAAC;IAAA,OAAM+B,QAAQ,CAAC,IAAI,CAAC;EAAA,GAAEtB,SAAS,CAAC;EAE/D,IAAMyB,WAAW,GAAGlC,UAAU,CAAC;IAAA,OAAM+B,QAAQ,CAAC,KAAK,CAAC;EAAA,GAAErB,SAAS,CAAC;EAEhE,IAAMyB,iBAAiB,GAAG,SAApBA,iBAAiB,GAAS;IAC9Bf,OAAO,CAACgB,OAAO,GAAG,IAAI;IACtBF,WAAW,CAACG,KAAK,EAAE;IACnBJ,WAAW,CAACK,GAAG,EAAE;EACnB,CAAC;EAED,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiB,GAAS;IAC9B,IAAInB,OAAO,CAACgB,OAAO,IAAI5B,KAAK,EAAE;MAC5B;IACF;IACAuB,QAAQ,CAAC,CAACvB,KAAK,CAAC;EAClB,CAAC;EAED,IAAMgC,iBAAiB,GAAG,SAApBA,iBAAiB,GAAS;IAC9BpB,OAAO,CAACgB,OAAO,GAAG,KAAK;IACvBH,WAAW,CAACI,KAAK,EAAE;IACnBH,WAAW,CAACI,GAAG,EAAE;EACnB,CAAC;EAED,IAAMG,0BAA0B,GAAG,SAA7BA,0BAA0B,GAAS;IACvCV,QAAQ,CAAC,KAAK,CAAC;EACjB,CAAC;EAED,IAAMW,kBAAkB,GAAG,SAArBA,kBAAkB,CAAIC,CAAa,EAAK;IAAA;IAC5C,IACElB,YAAY,IACZ,uBAACI,QAAQ,CAACO,OAAO,8CAAhB,kBAAkBQ,QAAQ,CAACD,CAAC,CAACE,MAAM,CAAS,KAC7C,CAACpB,YAAY,CAACmB,QAAQ,CAACD,CAAC,CAACE,MAAM,CAAS,EACxC;MACAd,QAAQ,CAAC,KAAK,CAAC;IACjB;EACF,CAAC;EAED5B,sBAAsB,CAACe,QAAQ,EAAE,OAAO,EAAEwB,kBAAkB,EAAE;IAC5DI,OAAO,EAAE,IAAI;IACbC,OAAO,EAAE;EACX,CAAC,CAAC;EACF,IAAMC,mBAAmB,GAAG9C,gBAAgB,CAAC,YAAY,EAAEiC,iBAAiB,CAAC;EAC7E,IAAMc,gBAAgB,GAAG/C,gBAAgB,CAAC,OAAO,EAAEqC,iBAAiB,CAAC;EACrE,IAAMW,mBAAmB,GAAGhD,gBAAgB,CAAC,YAAY,EAAEsC,iBAAiB,CAAC;EAE7E5C,KAAK,CAACuD,SAAS,CAAC,YAAM;IACpB,IAAI,CAACtB,QAAQ,CAACO,OAAO,EAAE;MACrB;IACF;IAEAa,gBAAgB,CAACG,GAAG,CAACvB,QAAQ,CAACO,OAAO,CAAC;IAEtC,IAAIjB,SAAS,EAAE;MACb6B,mBAAmB,CAACI,GAAG,CAACvB,QAAQ,CAACO,OAAO,CAAC;MACzCc,mBAAmB,CAACE,GAAG,CAACvB,QAAQ,CAACO,OAAO,CAAC;IAC3C;EACF,CAAC,EAAE,CACDP,QAAQ,EACRV,SAAS,EACT8B,gBAAgB,EAChBD,mBAAmB,EACnBE,mBAAmB,CACpB,CAAC;EAEF,OACE,oBAAC,KAAK,CAAC,QAAQ,QACZpB,KAAK,EACLtB,KAAK,IACJ,oBAAC,MAAM,eACDS,SAAS;IACb,SAAS,EAAC,UAAU;IACpB,SAAS,EAAEY,QAAS;IACpB,MAAM,EAAED,gBAAiB;IACzB,cAAc,EAAEjB,cAAe;IAC/B,KAAK,EAAEgB,MAAO;IACd,aAAa,EAAE;MAAA,IAAG0B,SAAS,SAATA,SAAS;MAAA,OACzB,oBAAC,SAAS;QACR,SAAS,EAAEA,SAAU;QACrB,OAAO,EAAEZ;MAA2B,GAEnC7B,OAAO,CACE;IAAA,CACZ;IACF,WAAW,EAAEO,SAAS,GAAGe,WAAW,CAACG,KAAK,GAAGiB,SAAU;IACvD,UAAU,EAAEnC,SAAS,GAAGqB,iBAAiB,GAAGc;EAAU,GAEzD,CACc;AAErB,CAAC"}
|
|
@@ -135,8 +135,7 @@ var SearchComponent = function SearchComponent(_ref2) {
|
|
|
135
135
|
}, placeholder)), isFocused && platform === IOS && after && createScopedElement("div", {
|
|
136
136
|
vkuiClass: "Search__after-width"
|
|
137
137
|
}, after))), createScopedElement("div", {
|
|
138
|
-
vkuiClass: "Search__after"
|
|
139
|
-
onClick: onCancel
|
|
138
|
+
vkuiClass: "Search__after"
|
|
140
139
|
}, createScopedElement("div", {
|
|
141
140
|
vkuiClass: "Search__icons"
|
|
142
141
|
}, icon && createScopedElement(Touch, {
|
|
@@ -144,9 +143,11 @@ var SearchComponent = function SearchComponent(_ref2) {
|
|
|
144
143
|
vkuiClass: "Search__icon"
|
|
145
144
|
}, icon), !!value && createScopedElement(Touch, {
|
|
146
145
|
onStart: onIconCancelClickStart,
|
|
146
|
+
onClick: onCancel,
|
|
147
147
|
vkuiClass: "Search__icon"
|
|
148
148
|
}, platform === IOS ? createScopedElement(Icon16Clear, null) : createScopedElement(Icon24Cancel, null))), platform === IOS && after && createScopedElement("div", {
|
|
149
|
-
vkuiClass: "Search__after-in"
|
|
149
|
+
vkuiClass: "Search__after-in",
|
|
150
|
+
onClick: onCancel
|
|
150
151
|
}, after))), platform === VKCOM && createScopedElement(Separator, {
|
|
151
152
|
vkuiClass: "Search__separator",
|
|
152
153
|
wide: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Search.js","names":["React","classNames","withPlatform","Icon16SearchOutline","Icon16Clear","Icon24Cancel","IOS","VKCOM","ANDROID","Touch","noop","Text","Title","Headline","Separator","useExternRef","useEnsuredControl","useAdaptivity","SearchPlaceholderTypography","platform","children","restProps","SearchComponent","before","className","defaultValue","placeholder","after","getRef","icon","onIconClick","style","autoComplete","inputProps","inputRef","useState","isFocused","setFocused","value","onChange","sizeY","onFocus","e","onBlur","onCancel","useCallback","nativeInputValueSetter","Object","getOwnPropertyDescriptor","HTMLInputElement","prototype","set","call","current","ev2","Event","bubbles","dispatchEvent","onIconClickStart","originalEvent","onIconCancelClickStart","preventDefault","focus","Search","displayName"],"sources":["../../../../src/components/Search/Search.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { classNames } from \"../../lib/classNames\";\nimport { withPlatform } from \"../../hoc/withPlatform\";\nimport {\n Icon16SearchOutline,\n Icon16Clear,\n Icon24Cancel,\n} from \"@vkontakte/icons\";\nimport { IOS, VKCOM, ANDROID } from \"../../lib/platform\";\nimport { HasPlatform, HasRef } from \"../../types\";\nimport { Touch, TouchEvent } from \"../Touch/Touch\";\nimport { VKUITouchEvent } from \"../../lib/touch\";\nimport { noop } from \"../../lib/utils\";\nimport { Text } from \"../Typography/Text/Text\";\nimport { Title } from \"../Typography/Title/Title\";\nimport { Headline } from \"../Typography/Headline/Headline\";\nimport { Separator } from \"../Separator/Separator\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEnsuredControl } from \"../../hooks/useEnsuredControl\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport \"./Search.css\";\n\nexport type InputRef = (element: HTMLInputElement) => void;\n\ninterface SearchPlaceholderTypographyProps\n extends HasPlatform,\n React.HTMLAttributes<HTMLElement> {}\n\nconst SearchPlaceholderTypography = ({\n platform,\n children,\n ...restProps\n}: SearchPlaceholderTypographyProps) => {\n switch (platform) {\n case IOS:\n return (\n <Title {...restProps} level=\"3\" weight=\"3\">\n {children}\n </Title>\n );\n case VKCOM:\n return <Text {...restProps}>{children}</Text>;\n case ANDROID:\n default:\n return (\n <Headline {...restProps} weight=\"3\">\n {children}\n </Headline>\n );\n }\n};\n\nexport interface SearchProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement>,\n HasPlatform {\n /**\n * iOS only. Текст кнопки \"отмена\", которая чистит текстовое поле и убирает фокус.\n */\n after?: React.ReactNode;\n before?: React.ReactNode;\n icon?: React.ReactNode;\n onIconClick?: (e: VKUITouchEvent) => void;\n defaultValue?: string;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Search\n */\nconst SearchComponent = ({\n before = <Icon16SearchOutline aria-hidden />,\n className,\n defaultValue = \"\",\n placeholder = \"Поиск\",\n after = \"Отмена\",\n getRef,\n platform,\n icon,\n onIconClick = noop,\n style,\n autoComplete = \"off\",\n ...inputProps\n}: SearchProps) => {\n const inputRef = useExternRef(getRef);\n const [isFocused, setFocused] = React.useState(false);\n const [value, onChange] = useEnsuredControl(inputProps, { defaultValue });\n const { sizeY } = useAdaptivity();\n\n const onFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n inputProps.onFocus && inputProps.onFocus(e);\n };\n\n const onBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n inputProps.onBlur && inputProps.onBlur(e);\n };\n\n const onCancel = React.useCallback(() => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n HTMLInputElement.prototype,\n \"value\"\n )?.set;\n nativeInputValueSetter?.call(inputRef.current, \"\");\n\n const ev2 = new Event(\"input\", { bubbles: true });\n inputRef.current?.dispatchEvent(ev2);\n }, [inputRef]);\n\n const onIconClickStart = React.useCallback(\n (e: TouchEvent) => onIconClick(e.originalEvent),\n [onIconClick]\n );\n\n const onIconCancelClickStart = React.useCallback(\n (e: TouchEvent) => {\n e.originalEvent.preventDefault();\n inputRef.current?.focus();\n onCancel();\n },\n [inputRef, onCancel]\n );\n\n return (\n <div\n vkuiClass={classNames(\n \"Search\",\n platform === VKCOM && \"Search--vkcom\",\n platform === IOS && \"Search--ios\",\n // TODO: V5 перенести на новую адаптивность\n `Search--sizeY-${sizeY}`,\n isFocused && \"Search--focused\",\n value && \"Search--has-value\",\n icon && \"Search--has-after\",\n after && \"Search--has-icon\"\n )}\n className={className}\n style={style}\n >\n <div vkuiClass=\"Search__in\">\n <div vkuiClass=\"Search__width\" />\n <label vkuiClass=\"Search__control\">\n <input\n type=\"search\"\n {...inputProps}\n autoComplete={autoComplete}\n ref={inputRef}\n vkuiClass=\"Search__input\"\n onFocus={onFocus}\n onBlur={onBlur}\n onChange={onChange}\n value={value}\n />\n {platform === IOS && after && (\n <div vkuiClass=\"Search__after-width\">{after}</div>\n )}\n <div vkuiClass=\"Search__placeholder\">\n <div vkuiClass=\"Search__placeholder-in\">\n {before}\n <SearchPlaceholderTypography\n vkuiClass=\"Search__placeholder-text\"\n platform={platform}\n >\n {placeholder}\n </SearchPlaceholderTypography>\n </div>\n {isFocused && platform === IOS && after && (\n <div vkuiClass=\"Search__after-width\">{after}</div>\n )}\n </div>\n </label>\n <div vkuiClass=\"Search__after\" onClick={onCancel}>\n <div vkuiClass=\"Search__icons\">\n {icon && (\n <Touch onStart={onIconClickStart} vkuiClass=\"Search__icon\">\n {icon}\n </Touch>\n )}\n {!!value && (\n <Touch onStart={onIconCancelClickStart} vkuiClass=\"Search__icon\">\n {platform === IOS ? <Icon16Clear /> : <Icon24Cancel />}\n </Touch>\n )}\n </div>\n {platform === IOS && after && (\n <div vkuiClass=\"Search__after-in\">{after}</div>\n )}\n </div>\n </div>\n {platform === VKCOM && <Separator vkuiClass=\"Search__separator\" wide />}\n </div>\n );\n};\n\nexport const Search = withPlatform(SearchComponent);\n\nSearch.displayName = \"Search\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Search.js","names":["React","classNames","withPlatform","Icon16SearchOutline","Icon16Clear","Icon24Cancel","IOS","VKCOM","ANDROID","Touch","noop","Text","Title","Headline","Separator","useExternRef","useEnsuredControl","useAdaptivity","SearchPlaceholderTypography","platform","children","restProps","SearchComponent","before","className","defaultValue","placeholder","after","getRef","icon","onIconClick","style","autoComplete","inputProps","inputRef","useState","isFocused","setFocused","value","onChange","sizeY","onFocus","e","onBlur","onCancel","useCallback","nativeInputValueSetter","Object","getOwnPropertyDescriptor","HTMLInputElement","prototype","set","call","current","ev2","Event","bubbles","dispatchEvent","onIconClickStart","originalEvent","onIconCancelClickStart","preventDefault","focus","Search","displayName"],"sources":["../../../../src/components/Search/Search.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { classNames } from \"../../lib/classNames\";\nimport { withPlatform } from \"../../hoc/withPlatform\";\nimport {\n Icon16SearchOutline,\n Icon16Clear,\n Icon24Cancel,\n} from \"@vkontakte/icons\";\nimport { IOS, VKCOM, ANDROID } from \"../../lib/platform\";\nimport { HasPlatform, HasRef } from \"../../types\";\nimport { Touch, TouchEvent } from \"../Touch/Touch\";\nimport { VKUITouchEvent } from \"../../lib/touch\";\nimport { noop } from \"../../lib/utils\";\nimport { Text } from \"../Typography/Text/Text\";\nimport { Title } from \"../Typography/Title/Title\";\nimport { Headline } from \"../Typography/Headline/Headline\";\nimport { Separator } from \"../Separator/Separator\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEnsuredControl } from \"../../hooks/useEnsuredControl\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport \"./Search.css\";\n\nexport type InputRef = (element: HTMLInputElement) => void;\n\ninterface SearchPlaceholderTypographyProps\n extends HasPlatform,\n React.HTMLAttributes<HTMLElement> {}\n\nconst SearchPlaceholderTypography = ({\n platform,\n children,\n ...restProps\n}: SearchPlaceholderTypographyProps) => {\n switch (platform) {\n case IOS:\n return (\n <Title {...restProps} level=\"3\" weight=\"3\">\n {children}\n </Title>\n );\n case VKCOM:\n return <Text {...restProps}>{children}</Text>;\n case ANDROID:\n default:\n return (\n <Headline {...restProps} weight=\"3\">\n {children}\n </Headline>\n );\n }\n};\n\nexport interface SearchProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement>,\n HasPlatform {\n /**\n * iOS only. Текст кнопки \"отмена\", которая чистит текстовое поле и убирает фокус.\n */\n after?: React.ReactNode;\n before?: React.ReactNode;\n icon?: React.ReactNode;\n onIconClick?: (e: VKUITouchEvent) => void;\n defaultValue?: string;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Search\n */\nconst SearchComponent = ({\n before = <Icon16SearchOutline aria-hidden />,\n className,\n defaultValue = \"\",\n placeholder = \"Поиск\",\n after = \"Отмена\",\n getRef,\n platform,\n icon,\n onIconClick = noop,\n style,\n autoComplete = \"off\",\n ...inputProps\n}: SearchProps) => {\n const inputRef = useExternRef(getRef);\n const [isFocused, setFocused] = React.useState(false);\n const [value, onChange] = useEnsuredControl(inputProps, { defaultValue });\n const { sizeY } = useAdaptivity();\n\n const onFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n inputProps.onFocus && inputProps.onFocus(e);\n };\n\n const onBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n inputProps.onBlur && inputProps.onBlur(e);\n };\n\n const onCancel = React.useCallback(() => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n HTMLInputElement.prototype,\n \"value\"\n )?.set;\n nativeInputValueSetter?.call(inputRef.current, \"\");\n\n const ev2 = new Event(\"input\", { bubbles: true });\n inputRef.current?.dispatchEvent(ev2);\n }, [inputRef]);\n\n const onIconClickStart = React.useCallback(\n (e: TouchEvent) => onIconClick(e.originalEvent),\n [onIconClick]\n );\n\n const onIconCancelClickStart = React.useCallback(\n (e: TouchEvent) => {\n e.originalEvent.preventDefault();\n inputRef.current?.focus();\n onCancel();\n },\n [inputRef, onCancel]\n );\n\n return (\n <div\n vkuiClass={classNames(\n \"Search\",\n platform === VKCOM && \"Search--vkcom\",\n platform === IOS && \"Search--ios\",\n // TODO: V5 перенести на новую адаптивность\n `Search--sizeY-${sizeY}`,\n isFocused && \"Search--focused\",\n value && \"Search--has-value\",\n icon && \"Search--has-after\",\n after && \"Search--has-icon\"\n )}\n className={className}\n style={style}\n >\n <div vkuiClass=\"Search__in\">\n <div vkuiClass=\"Search__width\" />\n <label vkuiClass=\"Search__control\">\n <input\n type=\"search\"\n {...inputProps}\n autoComplete={autoComplete}\n ref={inputRef}\n vkuiClass=\"Search__input\"\n onFocus={onFocus}\n onBlur={onBlur}\n onChange={onChange}\n value={value}\n />\n {platform === IOS && after && (\n <div vkuiClass=\"Search__after-width\">{after}</div>\n )}\n <div vkuiClass=\"Search__placeholder\">\n <div vkuiClass=\"Search__placeholder-in\">\n {before}\n <SearchPlaceholderTypography\n vkuiClass=\"Search__placeholder-text\"\n platform={platform}\n >\n {placeholder}\n </SearchPlaceholderTypography>\n </div>\n {isFocused && platform === IOS && after && (\n <div vkuiClass=\"Search__after-width\">{after}</div>\n )}\n </div>\n </label>\n <div vkuiClass=\"Search__after\">\n <div vkuiClass=\"Search__icons\">\n {icon && (\n <Touch onStart={onIconClickStart} vkuiClass=\"Search__icon\">\n {icon}\n </Touch>\n )}\n {!!value && (\n <Touch\n onStart={onIconCancelClickStart}\n onClick={onCancel}\n vkuiClass=\"Search__icon\"\n >\n {platform === IOS ? <Icon16Clear /> : <Icon24Cancel />}\n </Touch>\n )}\n </div>\n {platform === IOS && after && (\n <div vkuiClass=\"Search__after-in\" onClick={onCancel}>\n {after}\n </div>\n )}\n </div>\n </div>\n {platform === VKCOM && <Separator vkuiClass=\"Search__separator\" wide />}\n </div>\n );\n};\n\nexport const Search = withPlatform(SearchComponent);\n\nSearch.displayName = \"Search\";\n"],"mappings":"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"}
|
|
@@ -204,6 +204,7 @@ export var Tooltip = function Tooltip(_ref2) {
|
|
|
204
204
|
var _useDOM = useDOM(),
|
|
205
205
|
document = _useDOM.document;
|
|
206
206
|
useGlobalEventListener(document, "click", isShown && onClose, {
|
|
207
|
+
capture: true,
|
|
207
208
|
passive: true
|
|
208
209
|
});
|
|
209
210
|
// NOTE: setting isShown to true used to trigger usePopper().forceUpdate()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.js","names":["React","ReactDOM","classNames","getClassName","Subhead","useNavTransition","PopperArrow","usePopper","tooltipContainerAttr","useExternRef","useDOM","warnOnce","hasReactNode","prefixClass","useGlobalEventListener","isDOMTypeElement","element","isValidElement","type","baseClassName","warn","IS_DEV","process","env","NODE_ENV","SimpleTooltip","forwardRef","ref","appearance","header","text","arrow","style","attributes","container","mapAlignX","x","getPlacement","alignX","alignY","filter","p","join","isVerticalPlacement","placement","startsWith","calculateAppearance","mode","Tooltip","children","isShown","_isShown","offsetX","offsetY","onClose","cornerOffset","cornerAbsoluteOffset","restProps","entering","useState","tooltipRef","setTooltipRef","target","setTarget","multiChildren","Children","count","primitiveChild","JSON","stringify","Boolean","tooltipContainer","useMemo","closest","strategy","position","Error","modifiers","name","options","offset","push","padding","enabled","phase","fn","state","modifiersData","undefined","y","_placement","styles","document","passive","childRef","props","getRootRef","patchedRef","child","cloneElement","_appearance","createPortal","el","popper"],"sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { classNames } from \"../../lib/classNames\";\nimport { getClassName } from \"../../helpers/getClassName\";\nimport { Subhead } from \"../Typography/Subhead/Subhead\";\nimport { useNavTransition } from \"../NavTransitionContext/NavTransitionContext\";\nimport { PopperArrow } from \"../PopperArrow/PopperArrow\";\nimport { Modifier, usePopper } from \"react-popper\";\nimport { Placement } from \"@popperjs/core\";\nimport { tooltipContainerAttr } from \"./TooltipContainer\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useDOM } from \"../../lib/dom\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { hasReactNode } from \"../../lib/utils\";\nimport { prefixClass } from \"../../lib/prefixClass\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { HasRootRef } from \"../../types\";\nimport \"./Tooltip.css\";\n\ninterface SimpleTooltipProps extends Partial<TooltipProps> {\n target?: HTMLDivElement;\n style?: {\n arrow: React.CSSProperties;\n container: React.CSSProperties;\n };\n attributes?: {\n arrow: React.HTMLAttributes<HTMLDivElement> | null;\n container: React.HTMLAttributes<HTMLDivElement> | null;\n };\n}\n\nconst isDOMTypeElement = (\n element: React.ReactElement\n): element is React.DOMElement<any, any> => {\n return React.isValidElement(element) && typeof element.type === \"string\";\n};\n\nconst baseClassName = getClassName(\"Tooltip\");\nconst warn = warnOnce(\"Tooltip\");\nconst IS_DEV = process.env.NODE_ENV === \"development\";\n\nconst SimpleTooltip = React.forwardRef<HTMLDivElement, SimpleTooltipProps>(\n function SimpleTooltip(\n { appearance = \"accent\", header, text, arrow, style = {}, attributes },\n ref\n ) {\n return (\n <div vkuiClass={classNames(baseClassName, `Tooltip--${appearance}`)}>\n <div\n vkuiClass=\"Tooltip__container\"\n ref={ref}\n style={style.container}\n {...attributes?.container}\n >\n {arrow && (\n <PopperArrow\n style={style.arrow}\n attributes={attributes?.arrow}\n arrowClassName={prefixClass(\"Tooltip__arrow\")}\n />\n )}\n <div vkuiClass=\"Tooltip__content\">\n {header && (\n <Subhead weight=\"2\" vkuiClass=\"Tooltip__title\">\n {header}\n </Subhead>\n )}\n {text && <Subhead vkuiClass=\"Tooltip__text\">{text}</Subhead>}\n </div>\n </div>\n </div>\n );\n }\n);\n\nexport interface TooltipProps {\n /**\n * **Важно**: если в `children` передан React-компонент, то необходимо убедиться в том, что он поддерживает\n * свойство `getRootRef`, которое должно возвращаться ссылку на корневой DOM-элемент компонента,\n * иначе тултип показан не будет. Если передан React-element, то такой проблемы нет.\n */\n children:\n | React.ReactElement<HasRootRef<any>>\n | React.ReactElement<React.PropsWithRef<any>>;\n /**\n * @deprecated будет удалено в 5.0.0, устанавливать стиль следует через appearance\n * Стиль отображения подсказки\n */\n mode?: \"accent\" | \"light\";\n /**\n * Стиль отображения подсказки\n */\n appearance?: \"accent\" | \"neutral\" | \"white\" | \"black\" | \"inversion\";\n /**\n * Если передан `false`, то рисуется просто `children`.\n */\n isShown?: boolean;\n /**\n * Текст тултипа.\n */\n text?: React.ReactNode;\n /**\n * Заголовок тултипа.\n */\n header?: React.ReactNode;\n /**\n * Положение по горизонтали (прижатие к левому или правому краю `children`).\n * Если не задано, позиция по горизонтали определятся автоматически\n */\n alignX?: \"center\" | \"left\" | \"right\";\n /**\n * Положение по вертикали (расположение над или под `children`).\n * Если не задано, позиция по вертикали определятся автоматически\n */\n alignY?: \"top\" | \"bottom\";\n /**\n * Сдвиг по горизонтали (относительно портала, в котором рисуется тултип).\n */\n offsetX?: number;\n /**\n * Сдвиг по вертикали (относительно портала, в котором рисуется тултип).\n */\n offsetY?: number;\n /**\n * Отображать ли стрелку, указывающую на якорный элемент\n */\n arrow?: boolean;\n /**\n * Сдвиг стрелочки относительно центра дочернего элемента.\n */\n cornerOffset?: number;\n /**\n * Сдвиг стрелочки относительно ширины тултипа\n */\n cornerAbsoluteOffset?: number;\n /**\n * Callback, который вызывается при клике по любому месту в пределах экрана.\n */\n onClose?: () => void;\n /**\n * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства\n */\n placement?: Placement;\n}\n\nfunction mapAlignX(x: TooltipProps[\"alignX\"]) {\n switch (x) {\n case \"left\":\n return \"start\";\n case \"right\":\n return \"end\";\n default:\n return \"\";\n }\n}\nfunction getPlacement(\n alignX: TooltipProps[\"alignX\"],\n alignY: TooltipProps[\"alignY\"]\n): Placement {\n return [alignY || \"bottom\", mapAlignX(alignX || \"left\")]\n .filter((p) => !!p)\n .join(\"-\") as Placement;\n}\nfunction isVerticalPlacement(placement: Placement) {\n return placement.startsWith(\"top\") || placement.startsWith(\"bottom\");\n}\n\n/**\n * Вычисляем стиль подсказки: параметр appearance имеет приоритет, иначе мапим mode на подходящее значение из appearance\n * TODO: v5 избавиться от пропа mode и этого метода, для appearance по умолчанию сделать \"accent\"\n */\nfunction calculateAppearance(\n mode: TooltipProps[\"mode\"],\n appearance: TooltipProps[\"appearance\"]\n): TooltipProps[\"appearance\"] {\n if (appearance) {\n return appearance;\n }\n\n return mode === \"light\" ? \"white\" : \"accent\";\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const Tooltip = ({\n children,\n isShown: _isShown = true,\n offsetX = 0,\n offsetY = 15,\n alignX,\n alignY,\n onClose,\n cornerOffset = 0,\n cornerAbsoluteOffset,\n mode = \"accent\",\n appearance,\n arrow = true,\n placement,\n ...restProps\n}: TooltipProps) => {\n const { entering } = useNavTransition();\n const isShown = _isShown && !entering;\n const [tooltipRef, setTooltipRef] = React.useState<HTMLElement | null>(null);\n const [target, setTarget] = React.useState<HTMLElement>();\n\n if (IS_DEV) {\n const multiChildren = React.Children.count(children) > 1;\n // Empty children is a noop\n const primitiveChild =\n hasReactNode(children) && typeof children !== \"object\";\n (multiChildren || primitiveChild) &&\n warn(\n [\n \"children должен быть одним React элементом, получено\",\n multiChildren && \"несколько\",\n primitiveChild && JSON.stringify(children),\n ]\n .filter(Boolean)\n .join(\" \"),\n \"error\"\n );\n }\n\n /* eslint-disable no-restricted-properties */\n /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion*/\n const tooltipContainer = React.useMemo(\n () => target?.closest(`[${tooltipContainerAttr}]`) as HTMLDivElement,\n [target]\n );\n const strategy = React.useMemo(\n () => (target?.style.position === \"fixed\" ? \"fixed\" : \"absolute\"),\n [target]\n );\n /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion*/\n /* eslint-enable no-restricted-properties */\n\n if (IS_DEV && target && !tooltipContainer) {\n throw new Error(\n \"Use TooltipContainer for Tooltip outside Panel (see docs)\"\n );\n }\n\n const modifiers = React.useMemo(() => {\n const modifiers: Array<Modifier<string>> = [\n {\n name: \"offset\",\n options: {\n offset: [offsetX, offsetY],\n },\n },\n {\n name: \"preventOverflow\",\n },\n {\n name: \"flip\",\n },\n ];\n\n if (arrow) {\n modifiers.push({\n name: \"arrow\",\n options: {\n padding: 14,\n },\n });\n modifiers.push({\n name: \"arrowOffset\",\n enabled: true,\n phase: \"main\",\n fn({ state }) {\n if (!state.modifiersData.arrow) {\n return;\n }\n if (isVerticalPlacement(state.placement)) {\n if (cornerAbsoluteOffset !== undefined) {\n state.modifiersData.arrow.x = cornerAbsoluteOffset;\n } else {\n if (state.modifiersData.arrow?.x !== undefined) {\n state.modifiersData.arrow.x += cornerOffset;\n }\n }\n } else {\n if (cornerAbsoluteOffset !== undefined) {\n state.modifiersData.arrow.y = cornerAbsoluteOffset;\n } else {\n if (state.modifiersData.arrow?.y !== undefined) {\n state.modifiersData.arrow.y += cornerOffset;\n }\n }\n }\n },\n });\n }\n\n return modifiers;\n }, [arrow, cornerAbsoluteOffset, cornerOffset, offsetX, offsetY]);\n\n const _placement = placement ?? getPlacement(alignX, alignY);\n const { styles, attributes } = usePopper(target, tooltipRef, {\n strategy,\n placement: _placement,\n modifiers,\n });\n\n const { document } = useDOM();\n useGlobalEventListener(document, \"click\", isShown && onClose, {\n passive: true,\n });\n // NOTE: setting isShown to true used to trigger usePopper().forceUpdate()\n\n const childRef =\n React.isValidElement(children) &&\n (isDOMTypeElement(children) ? children.ref : children.props.getRootRef);\n const patchedRef = useExternRef(setTarget, childRef);\n const child = React.isValidElement(children)\n ? React.cloneElement(children, {\n [isDOMTypeElement(children) ? \"ref\" : \"getRootRef\"]: patchedRef,\n })\n : children;\n\n const _appearance = calculateAppearance(mode, appearance);\n\n return (\n <React.Fragment>\n {child}\n {isShown &&\n target != null &&\n ReactDOM.createPortal(\n <SimpleTooltip\n {...restProps}\n appearance={_appearance}\n arrow={arrow}\n ref={(el) => setTooltipRef(el)}\n style={{ arrow: styles.arrow, container: styles.popper }}\n attributes={{\n arrow: attributes.arrow ?? null,\n container: attributes.popper ?? null,\n }}\n />,\n tooltipContainer\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tooltip.js","names":["React","ReactDOM","classNames","getClassName","Subhead","useNavTransition","PopperArrow","usePopper","tooltipContainerAttr","useExternRef","useDOM","warnOnce","hasReactNode","prefixClass","useGlobalEventListener","isDOMTypeElement","element","isValidElement","type","baseClassName","warn","IS_DEV","process","env","NODE_ENV","SimpleTooltip","forwardRef","ref","appearance","header","text","arrow","style","attributes","container","mapAlignX","x","getPlacement","alignX","alignY","filter","p","join","isVerticalPlacement","placement","startsWith","calculateAppearance","mode","Tooltip","children","isShown","_isShown","offsetX","offsetY","onClose","cornerOffset","cornerAbsoluteOffset","restProps","entering","useState","tooltipRef","setTooltipRef","target","setTarget","multiChildren","Children","count","primitiveChild","JSON","stringify","Boolean","tooltipContainer","useMemo","closest","strategy","position","Error","modifiers","name","options","offset","push","padding","enabled","phase","fn","state","modifiersData","undefined","y","_placement","styles","document","capture","passive","childRef","props","getRootRef","patchedRef","child","cloneElement","_appearance","createPortal","el","popper"],"sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { classNames } from \"../../lib/classNames\";\nimport { getClassName } from \"../../helpers/getClassName\";\nimport { Subhead } from \"../Typography/Subhead/Subhead\";\nimport { useNavTransition } from \"../NavTransitionContext/NavTransitionContext\";\nimport { PopperArrow } from \"../PopperArrow/PopperArrow\";\nimport { Modifier, usePopper } from \"react-popper\";\nimport { Placement } from \"@popperjs/core\";\nimport { tooltipContainerAttr } from \"./TooltipContainer\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useDOM } from \"../../lib/dom\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { hasReactNode } from \"../../lib/utils\";\nimport { prefixClass } from \"../../lib/prefixClass\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { HasRootRef } from \"../../types\";\nimport \"./Tooltip.css\";\n\ninterface SimpleTooltipProps extends Partial<TooltipProps> {\n target?: HTMLDivElement;\n style?: {\n arrow: React.CSSProperties;\n container: React.CSSProperties;\n };\n attributes?: {\n arrow: React.HTMLAttributes<HTMLDivElement> | null;\n container: React.HTMLAttributes<HTMLDivElement> | null;\n };\n}\n\nconst isDOMTypeElement = (\n element: React.ReactElement\n): element is React.DOMElement<any, any> => {\n return React.isValidElement(element) && typeof element.type === \"string\";\n};\n\nconst baseClassName = getClassName(\"Tooltip\");\nconst warn = warnOnce(\"Tooltip\");\nconst IS_DEV = process.env.NODE_ENV === \"development\";\n\nconst SimpleTooltip = React.forwardRef<HTMLDivElement, SimpleTooltipProps>(\n function SimpleTooltip(\n { appearance = \"accent\", header, text, arrow, style = {}, attributes },\n ref\n ) {\n return (\n <div vkuiClass={classNames(baseClassName, `Tooltip--${appearance}`)}>\n <div\n vkuiClass=\"Tooltip__container\"\n ref={ref}\n style={style.container}\n {...attributes?.container}\n >\n {arrow && (\n <PopperArrow\n style={style.arrow}\n attributes={attributes?.arrow}\n arrowClassName={prefixClass(\"Tooltip__arrow\")}\n />\n )}\n <div vkuiClass=\"Tooltip__content\">\n {header && (\n <Subhead weight=\"2\" vkuiClass=\"Tooltip__title\">\n {header}\n </Subhead>\n )}\n {text && <Subhead vkuiClass=\"Tooltip__text\">{text}</Subhead>}\n </div>\n </div>\n </div>\n );\n }\n);\n\nexport interface TooltipProps {\n /**\n * **Важно**: если в `children` передан React-компонент, то необходимо убедиться в том, что он поддерживает\n * свойство `getRootRef`, которое должно возвращаться ссылку на корневой DOM-элемент компонента,\n * иначе тултип показан не будет. Если передан React-element, то такой проблемы нет.\n */\n children:\n | React.ReactElement<HasRootRef<any>>\n | React.ReactElement<React.PropsWithRef<any>>;\n /**\n * @deprecated будет удалено в 5.0.0, устанавливать стиль следует через appearance\n * Стиль отображения подсказки\n */\n mode?: \"accent\" | \"light\";\n /**\n * Стиль отображения подсказки\n */\n appearance?: \"accent\" | \"neutral\" | \"white\" | \"black\" | \"inversion\";\n /**\n * Если передан `false`, то рисуется просто `children`.\n */\n isShown?: boolean;\n /**\n * Текст тултипа.\n */\n text?: React.ReactNode;\n /**\n * Заголовок тултипа.\n */\n header?: React.ReactNode;\n /**\n * Положение по горизонтали (прижатие к левому или правому краю `children`).\n * Если не задано, позиция по горизонтали определятся автоматически\n */\n alignX?: \"center\" | \"left\" | \"right\";\n /**\n * Положение по вертикали (расположение над или под `children`).\n * Если не задано, позиция по вертикали определятся автоматически\n */\n alignY?: \"top\" | \"bottom\";\n /**\n * Сдвиг по горизонтали (относительно портала, в котором рисуется тултип).\n */\n offsetX?: number;\n /**\n * Сдвиг по вертикали (относительно портала, в котором рисуется тултип).\n */\n offsetY?: number;\n /**\n * Отображать ли стрелку, указывающую на якорный элемент\n */\n arrow?: boolean;\n /**\n * Сдвиг стрелочки относительно центра дочернего элемента.\n */\n cornerOffset?: number;\n /**\n * Сдвиг стрелочки относительно ширины тултипа\n */\n cornerAbsoluteOffset?: number;\n /**\n * Callback, который вызывается при клике по любому месту в пределах экрана.\n */\n onClose?: () => void;\n /**\n * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства\n */\n placement?: Placement;\n}\n\nfunction mapAlignX(x: TooltipProps[\"alignX\"]) {\n switch (x) {\n case \"left\":\n return \"start\";\n case \"right\":\n return \"end\";\n default:\n return \"\";\n }\n}\nfunction getPlacement(\n alignX: TooltipProps[\"alignX\"],\n alignY: TooltipProps[\"alignY\"]\n): Placement {\n return [alignY || \"bottom\", mapAlignX(alignX || \"left\")]\n .filter((p) => !!p)\n .join(\"-\") as Placement;\n}\nfunction isVerticalPlacement(placement: Placement) {\n return placement.startsWith(\"top\") || placement.startsWith(\"bottom\");\n}\n\n/**\n * Вычисляем стиль подсказки: параметр appearance имеет приоритет, иначе мапим mode на подходящее значение из appearance\n * TODO: v5 избавиться от пропа mode и этого метода, для appearance по умолчанию сделать \"accent\"\n */\nfunction calculateAppearance(\n mode: TooltipProps[\"mode\"],\n appearance: TooltipProps[\"appearance\"]\n): TooltipProps[\"appearance\"] {\n if (appearance) {\n return appearance;\n }\n\n return mode === \"light\" ? \"white\" : \"accent\";\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const Tooltip = ({\n children,\n isShown: _isShown = true,\n offsetX = 0,\n offsetY = 15,\n alignX,\n alignY,\n onClose,\n cornerOffset = 0,\n cornerAbsoluteOffset,\n mode = \"accent\",\n appearance,\n arrow = true,\n placement,\n ...restProps\n}: TooltipProps) => {\n const { entering } = useNavTransition();\n const isShown = _isShown && !entering;\n const [tooltipRef, setTooltipRef] = React.useState<HTMLElement | null>(null);\n const [target, setTarget] = React.useState<HTMLElement>();\n\n if (IS_DEV) {\n const multiChildren = React.Children.count(children) > 1;\n // Empty children is a noop\n const primitiveChild =\n hasReactNode(children) && typeof children !== \"object\";\n (multiChildren || primitiveChild) &&\n warn(\n [\n \"children должен быть одним React элементом, получено\",\n multiChildren && \"несколько\",\n primitiveChild && JSON.stringify(children),\n ]\n .filter(Boolean)\n .join(\" \"),\n \"error\"\n );\n }\n\n /* eslint-disable no-restricted-properties */\n /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion*/\n const tooltipContainer = React.useMemo(\n () => target?.closest(`[${tooltipContainerAttr}]`) as HTMLDivElement,\n [target]\n );\n const strategy = React.useMemo(\n () => (target?.style.position === \"fixed\" ? \"fixed\" : \"absolute\"),\n [target]\n );\n /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion*/\n /* eslint-enable no-restricted-properties */\n\n if (IS_DEV && target && !tooltipContainer) {\n throw new Error(\n \"Use TooltipContainer for Tooltip outside Panel (see docs)\"\n );\n }\n\n const modifiers = React.useMemo(() => {\n const modifiers: Array<Modifier<string>> = [\n {\n name: \"offset\",\n options: {\n offset: [offsetX, offsetY],\n },\n },\n {\n name: \"preventOverflow\",\n },\n {\n name: \"flip\",\n },\n ];\n\n if (arrow) {\n modifiers.push({\n name: \"arrow\",\n options: {\n padding: 14,\n },\n });\n modifiers.push({\n name: \"arrowOffset\",\n enabled: true,\n phase: \"main\",\n fn({ state }) {\n if (!state.modifiersData.arrow) {\n return;\n }\n if (isVerticalPlacement(state.placement)) {\n if (cornerAbsoluteOffset !== undefined) {\n state.modifiersData.arrow.x = cornerAbsoluteOffset;\n } else {\n if (state.modifiersData.arrow?.x !== undefined) {\n state.modifiersData.arrow.x += cornerOffset;\n }\n }\n } else {\n if (cornerAbsoluteOffset !== undefined) {\n state.modifiersData.arrow.y = cornerAbsoluteOffset;\n } else {\n if (state.modifiersData.arrow?.y !== undefined) {\n state.modifiersData.arrow.y += cornerOffset;\n }\n }\n }\n },\n });\n }\n\n return modifiers;\n }, [arrow, cornerAbsoluteOffset, cornerOffset, offsetX, offsetY]);\n\n const _placement = placement ?? getPlacement(alignX, alignY);\n const { styles, attributes } = usePopper(target, tooltipRef, {\n strategy,\n placement: _placement,\n modifiers,\n });\n\n const { document } = useDOM();\n useGlobalEventListener(document, \"click\", isShown && onClose, {\n capture: true,\n passive: true,\n });\n // NOTE: setting isShown to true used to trigger usePopper().forceUpdate()\n\n const childRef =\n React.isValidElement(children) &&\n (isDOMTypeElement(children) ? children.ref : children.props.getRootRef);\n const patchedRef = useExternRef(setTarget, childRef);\n const child = React.isValidElement(children)\n ? React.cloneElement(children, {\n [isDOMTypeElement(children) ? \"ref\" : \"getRootRef\"]: patchedRef,\n })\n : children;\n\n const _appearance = calculateAppearance(mode, appearance);\n\n return (\n <React.Fragment>\n {child}\n {isShown &&\n target != null &&\n ReactDOM.createPortal(\n <SimpleTooltip\n {...restProps}\n appearance={_appearance}\n arrow={arrow}\n ref={(el) => setTooltipRef(el)}\n style={{ arrow: styles.arrow, container: styles.popper }}\n attributes={{\n arrow: attributes.arrow ?? null,\n container: attributes.popper ?? null,\n }}\n />,\n tooltipContainer\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
) + var(--safe-area-inset-top))}.vkuiPanelHeader--vkcom~* .vkuiFixedLayout--top:not(.vkuiPanelHeader__fixed),.vkuiPanelHeader--vkcom~.vkuiFixedLayout--top{top:calc(48px + 0px);top:calc(var(
|
|
11
11
|
--panelheader_height_vkcom,
|
|
12
12
|
var(--vkui--size_panel_header_height--regular)
|
|
13
|
-
) + var(--safe-area-inset-top))}.vkuiFixedLayout.vkuiPanelHeaderContext{z-index:4}.vkuiButton{border:none;border-radius:8px;border-radius:var(--vkui--size_border_radius--regular,8px);box-sizing:border-box;display:inline-block;margin:0;max-width:100%;min-height:28px;min-height:var(--vkui--size_button_small_height--compact,28px);min-width:80px;min-width:var(--vkui--size_button_minimum_width--regular,80px);padding:0;position:relative;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vkuiButton--loading{cursor:progress}.vkuiButton--singleIcon{min-width:28px;
|
|
13
|
+
) + var(--safe-area-inset-top))}.vkuiFixedLayout.vkuiPanelHeaderContext{z-index:4}.vkuiButton{border:none;border-radius:8px;border-radius:var(--vkui--size_border_radius--regular,8px);box-sizing:border-box;display:inline-block;margin:0;max-width:100%;min-height:28px;min-height:var(--vkui--size_button_small_height--compact,28px);min-width:80px;min-width:var(--vkui--size_button_minimum_width--regular,80px);padding:0;position:relative;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vkuiButton--loading{cursor:progress}.vkuiButton--singleIcon{min-width:auto;width:28px;width:var(--vkui--size_button_small_height--compact,28px)}.vkuiButton--stretched{display:block;flex-basis:0;flex-grow:1;width:100%}.vkuiButton__in{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-height:inherit;text-align:center;width:100%}.vkuiButton--aln-left .vkuiButton__in{justify-content:flex-start;text-align:left}.vkuiButton--aln-right .vkuiButton__in{justify-content:flex-end;text-align:right}.vkuiButton[disabled]{opacity:.4;opacity:var(--vkui--opacity_disable,.4)}.vkuiButton--lvl-outline[disabled]:not(.vkuiButton--clr-overlay),.vkuiButton--lvl-primary[disabled]:not(.vkuiButton--clr-overlay):not(.vkuiButton--clr-negative):not(.vkuiButton--clr-positive),.vkuiButton--lvl-secondary[disabled]:not(.vkuiButton--clr-overlay),.vkuiButton--lvl-tertiary[disabled]:not(.vkuiButton--clr-overlay){opacity:.64}.vkuiButton__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vkuiButton--sz-s .vkuiButton__content:first-child{padding-left:16px;padding-left:var(--vkui--size_button_base_small_padding_horizontal--regular,16px)}.vkuiButton--sz-s .vkuiButton__after,.vkuiButton--sz-s .vkuiButton__content:last-child{padding-right:16px;padding-right:var(
|
|
14
14
|
--vkui--size_button_base_small_padding_horizontal--regular,16px
|
|
15
15
|
)}.vkuiButton--sz-m .vkuiButton__content:first-child{padding-left:16px;padding-left:var(
|
|
16
16
|
--vkui--size_button_base_medium_padding_horizontal--regular,16px
|
package/dist/vkui.css
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
) + var(--safe-area-inset-top))}.vkuiPanelHeader--vkcom~* .vkuiFixedLayout--top:not(.vkuiPanelHeader__fixed),.vkuiPanelHeader--vkcom~.vkuiFixedLayout--top{top:calc(48px + 0px);top:calc(var(
|
|
12
12
|
--panelheader_height_vkcom,
|
|
13
13
|
var(--vkui--size_panel_header_height--regular)
|
|
14
|
-
) + var(--safe-area-inset-top))}.vkuiFixedLayout.vkuiPanelHeaderContext{z-index:4}.vkuiButton{border:none;border-radius:8px;border-radius:var(--vkui--size_border_radius--regular,8px);box-sizing:border-box;display:inline-block;margin:0;max-width:100%;min-height:28px;min-height:var(--vkui--size_button_small_height--compact,28px);min-width:80px;min-width:var(--vkui--size_button_minimum_width--regular,80px);padding:0;position:relative;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vkuiButton--loading{cursor:progress}.vkuiButton--singleIcon{min-width:28px;
|
|
14
|
+
) + var(--safe-area-inset-top))}.vkuiFixedLayout.vkuiPanelHeaderContext{z-index:4}.vkuiButton{border:none;border-radius:8px;border-radius:var(--vkui--size_border_radius--regular,8px);box-sizing:border-box;display:inline-block;margin:0;max-width:100%;min-height:28px;min-height:var(--vkui--size_button_small_height--compact,28px);min-width:80px;min-width:var(--vkui--size_button_minimum_width--regular,80px);padding:0;position:relative;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vkuiButton--loading{cursor:progress}.vkuiButton--singleIcon{min-width:auto;width:28px;width:var(--vkui--size_button_small_height--compact,28px)}.vkuiButton--stretched{display:block;flex-basis:0;flex-grow:1;width:100%}.vkuiButton__in{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-height:inherit;text-align:center;width:100%}.vkuiButton--aln-left .vkuiButton__in{justify-content:flex-start;text-align:left}.vkuiButton--aln-right .vkuiButton__in{justify-content:flex-end;text-align:right}.vkuiButton[disabled]{opacity:.4;opacity:var(--vkui--opacity_disable,.4)}.vkuiButton--lvl-outline[disabled]:not(.vkuiButton--clr-overlay),.vkuiButton--lvl-primary[disabled]:not(.vkuiButton--clr-overlay):not(.vkuiButton--clr-negative):not(.vkuiButton--clr-positive),.vkuiButton--lvl-secondary[disabled]:not(.vkuiButton--clr-overlay),.vkuiButton--lvl-tertiary[disabled]:not(.vkuiButton--clr-overlay){opacity:.64}.vkuiButton__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vkuiButton--sz-s .vkuiButton__content:first-child{padding-left:16px;padding-left:var(--vkui--size_button_base_small_padding_horizontal--regular,16px)}.vkuiButton--sz-s .vkuiButton__after,.vkuiButton--sz-s .vkuiButton__content:last-child{padding-right:16px;padding-right:var(
|
|
15
15
|
--vkui--size_button_base_small_padding_horizontal--regular,16px
|
|
16
16
|
)}.vkuiButton--sz-m .vkuiButton__content:first-child{padding-left:16px;padding-left:var(
|
|
17
17
|
--vkui--size_button_base_medium_padding_horizontal--regular,16px
|