@vkontakte/vkui 5.9.1 → 5.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Alert/Alert.d.ts +3 -3
- package/dist/cjs/components/Alert/Alert.d.ts.map +1 -1
- package/dist/cjs/components/Alert/Alert.js +5 -3
- package/dist/cjs/components/Alert/Alert.js.map +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.d.ts +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.js +1 -2
- package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts +4 -2
- package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js +17 -5
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +4 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/FormLayout/FormLayout.d.ts +3 -3
- package/dist/cjs/components/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/cjs/components/FormLayout/FormLayout.js +5 -2
- package/dist/cjs/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/cjs/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/cjs/components/Gallery/Gallery.js +3 -10
- package/dist/cjs/components/Gallery/Gallery.js.map +1 -1
- package/dist/cjs/components/Gallery/hooks.d.ts +2 -0
- package/dist/cjs/components/Gallery/hooks.d.ts.map +1 -0
- package/dist/cjs/components/Gallery/hooks.js +52 -0
- package/dist/cjs/components/Gallery/hooks.js.map +1 -0
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +5 -2
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRoot.js +6 -8
- package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
- package/dist/cjs/lib/floating/adapters.d.ts +1 -1
- package/dist/cjs/lib/floating/adapters.d.ts.map +1 -1
- package/dist/cjs/lib/floating/adapters.js +1 -1
- package/dist/cjs/lib/floating/adapters.js.map +1 -1
- package/dist/cjs/lib/floating/index.d.ts +1 -1
- package/dist/cjs/lib/floating/index.d.ts.map +1 -1
- package/dist/cjs/lib/floating/index.js +1 -1
- package/dist/cjs/lib/floating/index.js.map +1 -1
- package/dist/cjs/lib/floating/types.d.ts +2 -2
- package/dist/cjs/lib/floating/types.d.ts.map +1 -1
- package/dist/components/Alert/Alert.d.ts +3 -3
- package/dist/components/Alert/Alert.d.ts.map +1 -1
- package/dist/components/Alert/Alert.js +5 -3
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.js +1 -2
- package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.d.ts +4 -2
- package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.js +17 -5
- package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +4 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/FormLayout/FormLayout.d.ts +3 -3
- package/dist/components/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/components/FormLayout/FormLayout.js +5 -2
- package/dist/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery/Gallery.js +3 -10
- package/dist/components/Gallery/Gallery.js.map +1 -1
- package/dist/components/Gallery/hooks.d.ts +2 -0
- package/dist/components/Gallery/hooks.d.ts.map +1 -0
- package/dist/components/Gallery/hooks.js +41 -0
- package/dist/components/Gallery/hooks.js.map +1 -0
- package/dist/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
- package/dist/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
- package/dist/components/ModalPageHeader/ModalPageHeader.js +5 -2
- package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.js +6 -8
- package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
- package/dist/components.css +5 -5
- package/dist/components.css.map +1 -1
- package/dist/components.js.tmp +3719 -2461
- package/dist/cssm/components/Alert/Alert.d.ts +3 -3
- package/dist/cssm/components/Alert/Alert.d.ts.map +1 -1
- package/dist/cssm/components/Alert/Alert.js +3 -2
- package/dist/cssm/components/Alert/Alert.js.map +1 -1
- package/dist/cssm/components/Button/Button.module.css +3 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.d.ts +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts +4 -2
- package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js +4 -2
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +4 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
- package/dist/cssm/components/FormLayout/FormLayout.d.ts +3 -3
- package/dist/cssm/components/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/cssm/components/FormLayout/FormLayout.js +4 -2
- package/dist/cssm/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/cssm/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/cssm/components/Gallery/Gallery.js +2 -7
- package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
- package/dist/cssm/components/Gallery/hooks.d.ts +2 -0
- package/dist/cssm/components/Gallery/hooks.d.ts.map +1 -0
- package/dist/cssm/components/Gallery/hooks.js +39 -0
- package/dist/cssm/components/Gallery/hooks.js.map +1 -0
- package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -4
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +4 -2
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.js +6 -8
- package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +7 -1
- package/dist/cssm/components/Snackbar/Snackbar.module.css +1 -1
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js +4 -2
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
- package/dist/cssm/lib/floating/adapters.d.ts +1 -1
- package/dist/cssm/lib/floating/adapters.d.ts.map +1 -1
- package/dist/cssm/lib/floating/adapters.js +1 -1
- package/dist/cssm/lib/floating/adapters.js.map +1 -1
- package/dist/cssm/lib/floating/index.d.ts +1 -1
- package/dist/cssm/lib/floating/index.d.ts.map +1 -1
- package/dist/cssm/lib/floating/index.js +1 -1
- package/dist/cssm/lib/floating/index.js.map +1 -1
- package/dist/cssm/lib/floating/types.d.ts +2 -2
- package/dist/cssm/lib/floating/types.d.ts.map +1 -1
- package/dist/cssm/lib/floating/types.js.map +1 -1
- package/dist/lib/floating/adapters.d.ts +1 -1
- package/dist/lib/floating/adapters.d.ts.map +1 -1
- package/dist/lib/floating/adapters.js +1 -1
- package/dist/lib/floating/adapters.js.map +1 -1
- package/dist/lib/floating/index.d.ts +1 -1
- package/dist/lib/floating/index.d.ts.map +1 -1
- package/dist/lib/floating/index.js +1 -1
- package/dist/lib/floating/index.js.map +1 -1
- package/dist/lib/floating/types.d.ts +2 -2
- package/dist/lib/floating/types.d.ts.map +1 -1
- package/dist/lib/floating/types.js.map +1 -1
- package/dist/vkui.css +5 -5
- package/dist/vkui.css.map +1 -1
- package/dist/vkui.js.tmp +3719 -2461
- package/package.json +2 -2
- package/src/components/Alert/Alert.tsx +10 -3
- package/src/components/Button/Button.module.css +3 -1
- package/src/components/CalendarRange/CalendarRange.tsx +0 -1
- package/src/components/ChipsSelect/ChipsSelect.tsx +1 -1
- package/src/components/CustomScrollView/CustomScrollView.tsx +13 -2
- package/src/components/CustomSelect/CustomSelect.tsx +5 -1
- package/src/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
- package/src/components/FormLayout/FormLayout.tsx +8 -3
- package/src/components/Gallery/Gallery.tsx +2 -6
- package/src/components/Gallery/hooks.ts +39 -0
- package/src/components/ModalPage/ModalPage.module.css +1 -4
- package/src/components/ModalPageHeader/ModalPageHeader.tsx +8 -4
- package/src/components/ModalRoot/ModalRoot.tsx +6 -5
- package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +6 -1
- package/src/components/Snackbar/Snackbar.module.css +1 -1
- package/src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx +6 -2
- package/src/lib/floating/adapters.ts +1 -1
- package/src/lib/floating/index.ts +1 -1
- package/src/lib/floating/types.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { SizeType } from '../../lib/adaptivity';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce, getTitleFromChildren } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { Input } from '../Input/Input';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { SelectMimicry } from '../SelectMimicry/SelectMimicry';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { CustomSelectClearButton, CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n [SizeType.COMPACT]: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\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({ option, ...props }: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: SelectProps['options'],\n inputValue: string,\n filterFn: SelectProps['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface SelectProps extends NativeSelectProps, FormFieldProps, TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * > ⚠️ В **v6** из возвращаемых типов будет удалён `CustomSelectOptionInterface[]`. Для кастомной фильтрации используйте\n * > `filterFn`.\n */\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[],\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string,\n ) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе селект не будет знать об актуальном состоянии\n * опции.\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 /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect(props: SelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\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 { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? props.defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n undefined,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? props.defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\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 ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\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 (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label).toLowerCase().includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n setFocusedOptionIndex(-1);\n onClose?.();\n }, [onClose, resetKeyboardInput]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('blur');\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\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 }, [selectElRef]);\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(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback((e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n }, []);\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = 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> = React.useCallback(\n (e) => {\n // TODO [>=6]: удалить `onInputChangeProp`.\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет ' +\n 'проигнорировано в v6.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.',\n );\n }\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\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 [areOptionsShown, close, focusOption, onKeyboardInput, open, opened, selectFocused],\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 selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(e.currentTarget.parentNode?.children, e.currentTarget),\n false,\n );\n },\n [focusOptionByIndex],\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={() => setNativeSelectValue('')}\n />\n );\n }, [clearButtonShown, ClearButton, iconProp]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n return (\n <label\n className={classNames(\n styles['CustomSelect'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n className={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-expect-error: TS2322 MouseEventHandler<HTMLSelectElement> !== MouseEventHandler<HTMLInputElement>\n onClick={props.onClick}\n before={before}\n after={afterIcons}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n before={before}\n after={afterIcons}\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\n className={styles['CustomSelect__control']}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","SizeType","COMPACT","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","React","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOptionProp","renderOption","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","useAdaptivity","sizeY","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","getTitleFromChildren","label","toLowerCase","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","Fragment","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","Footnote","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","DropdownIcon","afterIcons","classNames","REGULAR","Input","autoFocus","onKeyDown","after","mode","getFormFieldModeFromSelectType","SelectMimicry","aria-hidden","onKeyUp","select","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","sameWidth","forcePortal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { SizeType } from '../../lib/adaptivity';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce, getTitleFromChildren } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { Input } from '../Input/Input';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { SelectMimicry } from '../SelectMimicry/SelectMimicry';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { CustomSelectClearButton, CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n [SizeType.COMPACT]: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\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({ option, ...props }: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: SelectProps['options'],\n inputValue: string,\n filterFn: SelectProps['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\ninterface CustomSelectRenderOption extends CustomSelectOptionProps {\n option?: CustomSelectOptionInterface;\n}\n\nexport interface SelectProps extends NativeSelectProps, FormFieldProps, TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * > ⚠️ В **v6** из возвращаемых типов будет удалён `CustomSelectOptionInterface[]`. Для кастомной фильтрации используйте\n * > `filterFn`.\n */\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[],\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string,\n ) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе селект не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption) => 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 /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect(props: SelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\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 { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? props.defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n undefined,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? props.defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\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 ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\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 (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label).toLowerCase().includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n setFocusedOptionIndex(-1);\n onClose?.();\n }, [onClose, resetKeyboardInput]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('blur');\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\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 }, [selectElRef]);\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(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback((e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n }, []);\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = 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> = React.useCallback(\n (e) => {\n // TODO [>=6]: удалить `onInputChangeProp`.\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет ' +\n 'проигнорировано в v6.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.',\n );\n }\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\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 [areOptionsShown, close, focusOption, onKeyboardInput, open, opened, selectFocused],\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 selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(e.currentTarget.parentNode?.children, e.currentTarget),\n false,\n );\n },\n [focusOptionByIndex],\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={() => setNativeSelectValue('')}\n />\n );\n }, [clearButtonShown, ClearButton, iconProp]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n return (\n <label\n className={classNames(\n styles['CustomSelect'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n className={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-expect-error: TS2322 MouseEventHandler<HTMLSelectElement> !== MouseEventHandler<HTMLInputElement>\n onClick={props.onClick}\n before={before}\n after={afterIcons}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n before={before}\n after={afterIcons}\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\n className={styles['CustomSelect__control']}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","SizeType","COMPACT","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","React","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOptionProp","renderOption","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","useAdaptivity","sizeY","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","getTitleFromChildren","label","toLowerCase","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","Fragment","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","Footnote","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","DropdownIcon","afterIcons","classNames","REGULAR","Input","autoFocus","onKeyDown","after","mode","getFormFieldModeFromSelectType","SelectMimicry","aria-hidden","onKeyUp","select","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","sameWidth","forcePortal"],"mappings":";;;;+BAoMgBA;;;eAAAA;;;;;;;;;;+DApMO;oBACI;6BACG;4BACD;0BACJ;sBAEuC;yCACtB;qBACK;wBACtB;oCAEY;kCAI9B;4BACsB;qBAEP;6BAGQ;wBACL;uCAC6C;AAGtE,IAAMC;IACJC,IAAI;GACHC,oBAAQ,CAACC,OAAO;AAGnB,IAAMC,iBAAiB;QAACC,2EAAyC,EAAE,EAAEC,8EAAa,CAAC;IACjF,IAAIA,cAAcD,QAAQE,MAAM,GAAG,GAAG;QACpC,OAAO,CAAC;IACV;IACA,OAAOF,QAAQG,SAAS,CAAC,SAACC,QAAQC;eAAMA,IAAIJ,cAAc,CAACG,OAAOE,QAAQ;;AAC5E;AAEA,IAAMC,kBAAkB;QACtBP,2EAAyC,EAAE,EAC3CQ,4EAAmBR,QAAQE,MAAM;IAEjC,IAAIO,SAAS,CAAC;IACd,IAAID,YAAY,GAAG;QACjB,OAAOC;IACT;IACA,IAAK,IAAIJ,IAAIG,WAAW,GAAGH,KAAK,GAAGA,IAAK;QACtC,IAAID,SAASJ,OAAO,CAACK,EAAE;QAEvB,IAAI,CAACD,OAAOE,QAAQ,EAAE;YACpBG,SAASJ;YACT;QACF;IACF;IACA,OAAOI;AACT;AAEA,IAAMC,OAAOC,IAAAA,kBAAQ,EAAC;AAEtB,IAAMC,wBAAwB,SAACZ;IAC7B,IAAI,IAAIa,IAAIb,QAAQc,GAAG,CAAC,SAACC;eAAS,UAAiB,CAAVA,KAAKC,KAAK;QAAGC,IAAI,GAAG,GAAG;QAC9DP,KACE,+FACA;IAEJ;AACF;AAEA,SAASQ,sBAAsB;QAAEd,SAAF,OAAEA,QAAWe,qCAAb;QAAEf;;IAC/B,qBAAO,qBAACgB,sCAAkB,EAAKD;AACjC;AAEA,IAAME,mBAAsC,SAACC;IAC3CA,EAAEC,cAAc;AAClB;AAEA,SAASC,kBACPxB,OAAsC,EACtCgB,KAAkB,EAClBS,SAAkB;IAElB,IAAIA,aAAaT,UAAU,IAAI;QAC7B,OAAO,CAAC;IACV;QAEEhB;IADF,OACEA,CAAAA,qBAAAA,QAAQG,SAAS,CAAC,SAACY;QACjBC,QAAQ,OAAOD,KAAKC,KAAK,KAAK,WAAWU,OAAOV,SAASA;QACzD,OAAOD,KAAKC,KAAK,KAAKA;IACxB,gBAHAhB,gCAAAA,qBAGM,CAAC;AAEX;AAEA,IAAM2B,SAAS,SACb3B,SACA4B,YACAC;IAEA,OAAO,OAAOA,aAAa,aACvB7B,QAAQ2B,MAAM,CAAC,SAACvB;eAAWyB,SAASD,YAAYxB;SAChDJ;AACN;AAEA,IAAM8B,iBAAgD,EAAE;AA8FjD,SAASpC,aAAayB,KAAkB;IAC7C,IAA4BY,qCAAAA,OAAMC,QAAQ,CAAC,YAApCC,SAAqBF,oBAAbG,YAAaH;IAC5B,IACEI,SA6BEhB,MA7BFgB,QACAC,OA4BEjB,MA5BFiB,MACAC,YA2BElB,MA3BFkB,WACAC,SA0BEnB,MA1BFmB,QACAC,aAyBEpB,MAzBFoB,YACAC,iBAwBErB,MAxBFqB,gBACAC,QAuBEtB,MAvBFsB,OACAC,WAsBEvB,MAtBFuB,UACAC,WAqBExB,MArBFwB,UACAC,AAAeC,oBAoBb1B,MApBFyB,eACAE,iBAmBE3B,MAnBF2B,gBACAC,SAkBE5B,MAlBF4B,QACAC,UAiBE7B,MAjBF6B,SACAC,WAgBE9B,MAhBF8B,UACAC,sBAeE/B,MAfF+B,yCAeE/B,MAdFgC,YAAAA,4CAAa,+BACbC,oBAaEjC,MAbFiC,mBACAC,yBAYElC,MAZFkC,4CAYElC,MAXFmC,YAAAA,4CAAa,2BACCC,MAUZpC,MAVFqC,cAAcD,mBAAAA,iBAAmBrC,wBAAnBqC,KACLE,OASPtC,MATFnB,SAASyD,cAAAA,kBAAc3B,iBAAd2B,yBASPtC,MARFuC,WAAAA,0CAAY,0DAQVvC,MAPFU,UAAAA,wCAAW8B,uBAAe,oBAC1BC,AAAMC,WAMJ1C,MANFyC,2BAMEzC,MALF2C,aAAAA,8CAAcC,gDAAuB,iDAKnC5C,MAJF6C,kBAAAA,wDAAmB,iEAIjB7C,MAHF8C,wBAAAA,oEAAyB,6DAGvB9C,MAFF+C,kBAAAA,wDAAmB,gCAChBC,yCACDhD;QA7BFgB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAxD;QACA0D;QACA7B;QACA+B;QACAE;QACAE;QACAC;QACAC;;IAIF,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C1D,sBAAsB6C;IACxB;IAEA,IAA2Bc,kBAAAA,IAAAA,4BAAa,4BAAbA,gBAAnBC,OAAAA,0CAAQ;IAEhB,IAAMC,eAAe1C,OAAM2C,MAAM,CAAmB;IACpD,IAAMC,gBAAgBC,IAAAA,0BAAY,EAACH,cAAclC;IACjD,IAAMsC,eAAe9C,OAAM2C,MAAM,CAAwB;IACzD,IAAMI,cAAcF,IAAAA,0BAAY,EAACtC;IAEjC,IAAoDP,sCAAAA,OAAMC,QAAQ,CAAqB,CAAC,QAAjF+C,qBAA6ChD,qBAAzBiD,wBAAyBjD;IACpD,IAAsDA,sCAAAA,OAAMC,QAAQ,CAACb,MAAMH,KAAK,KAAKiE,gBAA9EC,sBAA+CnD,qBAA1BoD,yBAA0BpD;IACtD,IAAoCA,sCAAAA,OAAMC,QAAQ,CAAC,SAA5CJ,aAA6BG,qBAAjBqD,gBAAiBrD;IACpC,IAAkDA,sCAAAA,OAAMC,QAAQ,CAC9D;YAAMb,cAAAA;eAAAA,CAAAA,OAAAA,CAAAA,eAAAA,MAAMH,KAAK,cAAXG,0BAAAA,eAAeA,MAAMkE,YAAY,cAAjClE,kBAAAA,OAAsC6C,mBAAmB,KAAKiB;IAAS,QADxEK,oBAA2CvD,qBAAxBwD,uBAAwBxD;IAGlD,IAA0CA,sCAAAA,OAAMC,QAAQ,CAAC,SAAlDwD,gBAAmCzD,qBAApB0D,mBAAoB1D;IAC1C,IAA8CA,sCAAAA,OAAMC,QAAQ,CAC1DiD,gBADKS,kBAAuC3D,qBAAtB4D,qBAAsB5D;IAG9C,IAA8BA,sCAAAA,OAAMC,QAAQ,CAACyB,kBAAtCzD,UAAuB+B,qBAAd6D,aAAc7D;QAEGZ;IADjC,IAAsDY,sCAAAA,OAAMC,QAAQ,CAClER,kBAAkBiC,aAAatC,CAAAA,eAAAA,MAAMH,KAAK,cAAXG,0BAAAA,eAAeA,MAAMkE,YAAY,EAAErB,wBAD7D6B,sBAA+C9D,qBAA1B+D,yBAA0B/D;IAItDA,OAAMgE,SAAS,CAAC;QACdZ,uBAAuBhE,MAAMH,KAAK,KAAKiE;QACvCM,qBAAqB,SAACD;gBAAsBnE;mBAAAA,CAAAA,eAAAA,MAAMH,KAAK,cAAXG,0BAAAA,eAAemE;QAAgB;IAC7E,GAAG;QAACnE,MAAMH,KAAK;KAAC;IAEhBgF,IAAAA,oDAAyB,EAAC;QACxB,IACEhG,QAAQiG,IAAI,CAAC;gBAAGjF,cAAAA;mBAAYsE,sBAAsBtE;cACjDgD,oBAAoBsB,sBAAsB,IAC3C;gBAGAR;YAFA,IAAMoB,QAAQ,IAAIC,MAAM,UAAU;gBAAEC,SAAS;YAAK;aAElDtB,uBAAAA,YAAYuB,OAAO,cAAnBvB,2CAAAA,qBAAqBwB,aAAa,CAACJ;QACrC;IACF,GAAG;QAACZ;KAAkB;IAEtB,IAAMiB,WAAWxE,OAAMyE,OAAO,CAAC;QAC7B,IAAI,CAACxG,QAAQE,MAAM,EAAE;YACnB,OAAO;QACT;QAEA,OAAO2F,wBAAwBZ,YAAYjF,OAAO,CAAC6F,oBAAoB,GAAGZ;IAC5E,GAAG;QAACjF;QAAS6F;KAAoB;IAEjC,IAAMY,mBAAmB1E,OAAMyE,OAAO,CACpC;eACE,AAACvE,UACCgC,2BAA2B,KAC1ByB,CAAAA,CAAAA,4BAAAA,sCAAAA,gBAAiBgB,QAAQ,CAAC,mEAEQ,KACrCzB;OACF;QAAChB;QAAwBhC;QAAQyD;KAAgB;IAGnD,IAAMiB,qBAAqB5E,OAAM6E,WAAW,CAAC;QAC3CnB,iBAAiB;IACnB,GAAG,EAAE;IAEL,IAAMoB,kBAAkB9E,OAAM6E,WAAW,CAAC,SAACE;YAAeC,0EAAS;QACjE,IAAMC,WAAWnC,aAAawB,OAAO;QACrC,IAAMtF,OAAOiG,WAAYA,SAASrE,QAAQ,CAACmE,MAAM,GAAmB;QAEpE,IAAI,CAAC/F,QAAQ,CAACiG,UAAU;YACtB;QACF;QAEA,IAAMC,iBAAiBD,SAASE,YAAY;QAC5C,IAAMC,YAAYH,SAASG,SAAS;QACpC,IAAMC,UAAUrG,KAAKsG,SAAS;QAC9B,IAAMC,aAAavG,KAAKmG,YAAY;QAEpC,IAAIH,QAAQ;YACVC,SAASG,SAAS,GAAGC,UAAUH,iBAAiB,IAAIK,aAAa;QACnE,OAAO,IAAIF,UAAUE,aAAaL,iBAAiBE,WAAW;YAC5DH,SAASG,SAAS,GAAGC,UAAUH,iBAAiBK;QAClD,OAAO,IAAIF,UAAUD,WAAW;YAC9BH,SAASG,SAAS,GAAGC;QACvB;IACF,GAAG,EAAE;IAEL,IAAMG,eAAexF,OAAM6E,WAAW,CACpC,SAACE;YAC+B9G;QAA9B,OAAO8G,SAAS,KAAKA,QAAS9G,CAAAA,CAAAA,kBAAAA,QAAQE,MAAM,cAAdF,6BAAAA,kBAAkB,CAAA;IAClD,GACA;QAACA,QAAQE,MAAM;KAAC;IAGlB,IAAMsH,qBAAqBzF,OAAM6E,WAAW,CAC1C,SAACE;YAA2BW,4EAAW;YACYzH;QAAjD,IAAI8G,UAAU7B,aAAa6B,QAAQ,KAAKA,QAAQ,AAAC9G,CAAAA,CAAAA,kBAAAA,QAAQE,MAAM,cAAdF,6BAAAA,kBAAkB,CAAA,IAAK,GAAG;YACzE;QACF;QAEA,IAAMI,SAASJ,OAAO,CAAC8G,MAAM;QAE7B,IAAI1G,mBAAAA,6BAAAA,OAAQE,QAAQ,EAAE;YACpB;QACF;QAEA,IAAImH,UAAU;YACZZ,gBAAgBC;QAClB;QAEA,mDAAmD;QACnD9B,sBAAsB,SAACD;mBACrBA,uBAAuB+B,QAAQA,QAAQ/B;;IAE3C,GACA;QAAC/E;QAAS6G;KAAgB;IAG5B,IAAMa,kBAAkB3F,OAAM6E,WAAW,CAAC;QACxC,OAAO/B,aAAawB,OAAO,KAAK;IAClC,GAAG,EAAE;IAEL,IAAMsB,kBAAkB5F,OAAM6E,WAAW,CACvC,SAACgB;QACC/C,aAAawB,OAAO,GAAGuB;QAEvB,IAAIA,OAAO/B,wBAAwBZ,aAAasC,aAAa1B,sBAAsB;YACjF;gBACEgB,gBAAgBhB,qBAAqB;YACvC;QACF;IACF,GACA;QAAC0B;QAAcV;QAAiBhB;KAAoB;IAGtD,IAAMgC,kBAAkB9F,OAAM6E,WAAW,CACvC,SAACkB;QACC,IAAMC,YAAYvC,gBAAgBsC;QAElC,IAAME,cAAchI,QAAQG,SAAS,CAAC,SAACC;YACrC,OAAO6H,IAAAA,2BAAoB,EAAC7H,OAAO8H,KAAK,EAAEC,WAAW,GAAGzB,QAAQ,CAACqB;QACnE;QAEA,IAAIC,gBAAgB/C,aAAa+C,cAAc,CAAC,GAAG;YACjDR,mBAAmBQ;QACrB;QAEAvC,iBAAiBsC;IACnB,GACA;QAACP;QAAoBhC;QAAexF;KAAQ;IAG9C;;;GAGC,GACD,IAAMoI,QAAQrG,OAAM6E,WAAW,CAAC;QAC9BD;QAEAvB,cAAc;QACdlD,UAAU;QACV8C,sBAAsB,CAAC;QACvBhC,oBAAAA,8BAAAA;IACF,GAAG;QAACA;QAAS2D;KAAmB;IAEhC,IAAM0B,eAAetG,OAAM6E,WAAW,CACpC,SAACE;QACC,IAAM/F,OAAOf,OAAO,CAAC8G,MAAM;QAE3BvB,qBAAqBxE,iBAAAA,2BAAAA,KAAMC,KAAK;QAChCoH;QAEA,IAAME,8DACJpD,uBACA/D,MAAMH,KAAK,KAAKsE,qBAChBA,uBAAsBvE,iBAAAA,2BAAAA,KAAMC,KAAK;QAEnC,IAAIsH,6DAA6D;gBAE/DxD;YADA,IAAMoB,QAAQ,IAAIC,MAAM,UAAU;gBAAEC,SAAS;YAAK;aAClDtB,uBAAAA,YAAYuB,OAAO,cAAnBvB,2CAAAA,qBAAqBwB,aAAa,CAACJ;QACrC;IACF,GACA;QAACkC;QAAOpI;QAAS8E;QAAaI;QAAqB/D,MAAMH,KAAK;QAAEsE;KAAkB;IAGpF,IAAMiD,gBAAgBxG,OAAM6E,WAAW,CAAC;QACtC,IAAI7B,uBAAuBE,aAAa,CAACsC,aAAaxC,qBAAqB;YACzE;QACF;QAEAsD,aAAatD;IACf,GAAG;QAACA;QAAoBwC;QAAcc;KAAa;IAEnD,IAAMG,OAAOzG,OAAM6E,WAAW,CAAC;QAC7B1E,UAAU;QACV8C,sBAAsBa;QAEtB,IAAI,OAAO9C,WAAW,YAAY;YAChCA;QACF;IACF,GAAG;QAACA;QAAQ8C;KAAoB;IAEhC,IAAM4C,SAAS1G,OAAM6E,WAAW,CAAC;YAG/B9B;QAFAsD;QACA,IAAMlC,QAAQ,IAAIC,MAAM;SACxBrB,uBAAAA,YAAYuB,OAAO,cAAnBvB,2CAAAA,qBAAqBwB,aAAa,CAACJ;IACrC,GAAG;QAACkC;QAAOtD;KAAY;IAEvB,IAAM4D,qBAAqB3G,OAAM6E,WAAW,CAAC;QAC3C5B,sBAAsB,CAAC;IACzB,GAAG,EAAE;IAEL,IAAM2D,UAAU5G,OAAM6E,WAAW,CAAC;YAEhC9B;QADA,IAAMoB,QAAQ,IAAIC,MAAM;SACxBrB,uBAAAA,YAAYuB,OAAO,cAAnBvB,2CAAAA,qBAAqBwB,aAAa,CAACJ;IACrC,GAAG;QAACpB;KAAY;IAEhB,IAAM8D,UAAU7G,OAAM6E,WAAW,CAAC;QAChC,IAAI3E,QAAQ;YACVmG;QACF,OAAO;YACLI;QACF;IACF,GAAG;QAACJ;QAAOI;QAAMvG;KAAO;IAExB,IAAM4G,cAAc9G,OAAMyE,OAAO,CAAC;eAAMsC,IAAAA,eAAQ,EAACnC,oBAAoB;OAAO;QAACA;KAAmB;IAEhG,IAAMoC,cAAchH,OAAM6E,WAAW,CACnC,SAACoC;QACC,IAAIlC,QAAQ/B;QAEZ,IAAIiE,SAAS,QAAQ;YACnB,IAAMC,YAAYlJ,eAAeC,SAAS8G;YAC1CA,QAAQmC,cAAc,CAAC,IAAIlJ,eAAeC,WAAWiJ,WAAW,kDAAkD;QACpH,OAAO,IAAID,SAAS,QAAQ;YAC1B,IAAME,cAAc3I,gBAAgBP,SAAS8G;YAC7CA,QAAQoC,gBAAgB,CAAC,IAAI3I,gBAAgBP,WAAWkJ,aAAa,0DAA0D;QACjI;QAEA1B,mBAAmBV;IACrB,GACA;QAACU;QAAoBzC;QAAoB/E;KAAQ;IAGnD+B,OAAMgE,SAAS,CACb,SAASoD;YACOhI,cAAAA;QAAd,IAAMH,QAAQG,CAAAA,OAAAA,CAAAA,eAAAA,MAAMH,KAAK,cAAXG,0BAAAA,eAAemE,+BAAfnE,kBAAAA,OAAoCA,MAAMkE,YAAY;QAEpE,IAAMrF,UACJsD,cAAc1B,eAAeqD,YACzBtD,OAAO8B,aAAa7B,YAAYC,YAChC4B;QAENmC,WAAW5F;QACX8F,uBAAuBtE,kBAAkBxB,SAASgB,OAAOgD;IAC3D,GACA;QACEnC;QACAD;QACA0D;QACA7B;QACAtC,MAAMkE,YAAY;QAClBlE,MAAMH,KAAK;QACXsC;QACAU;KACD;IAGH;;;GAGC,GACD,IAAMoF,eAAerH,OAAM6E,WAAW,CAAC,SAACtF;YAClCuD;QAAJ,KAAIA,wBAAAA,aAAawB,OAAO,cAApBxB,4CAAAA,sBAAsBwE,QAAQ,CAAC/H,EAAEgI,MAAM,GAAW;YACpDhI,EAAEC,cAAc;QAClB;IACF,GAAG,EAAE;IAEL,IAAMgI,uBAAoE,SAACjI;QACzE,IAAMkI,yBAAyBhI,kBAC7BxB,SACAsB,EAAEmI,aAAa,CAACzI,KAAK,EACrBgD;QAGF,IAAI6B,wBAAwB2D,wBAAwB;YAClD,IAAI,CAACtE,qBAAqB;gBACxBY,uBAAuB0D;YACzB;YACA9G,qBAAAA,+BAAAA,SAAWpB;QACb;IACF;IAEA,IAAMoI,iBAA+D3H,OAAM6E,WAAW,CACpF,SAACV;QACC;YAAC;YAAW;YAAa;YAAU;SAAQ,CAACQ,QAAQ,CAACR,MAAM4B,GAAG,KAC5DJ,qBACAxB,MAAM3E,cAAc;QAEtB,OAAQ2E,MAAM4B,GAAG;YACf,KAAK;gBACHJ,qBAAqBqB,YAAY;gBACjC;YACF,KAAK;gBACHrB,qBAAqBqB,YAAY;gBACjC;YACF,KAAK;gBACHX;gBACA;YACF,KAAK;gBACHV,qBAAqBa;gBACrB;QACJ;IACF,GACA;QAACb;QAAiBU;QAAOW;QAAaR;KAAc;IAGtD,IAAM3F,gBAA4Db,OAAM6E,WAAW,CACjF,SAACtF;QACC,2CAA2C;QAC3C,IAAIuB,mBAAmB;YACrB,IAAM7C,UAAU6C,kBAAkBvB,GAAGmC;YACrC,IAAIzD,SAAS;gBACX,IAAIoE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;oBAC1C5D,KACE,8EACE;gBAEN;gBACAkF,WAAW5F;gBACX8F,uBAAuBtE,kBAAkBxB,SAASsF,mBAAmBtB;YACvE;QACF,OAAO;YACL,IAAMhE,WAAU2B,OAAO8B,aAAanC,EAAEgI,MAAM,CAACtI,KAAK,EAAEa;YACpD+D,WAAW5F;YACX8F,uBAAuBtE,kBAAkBxB,UAASsF,mBAAmBtB;QACvE;QACAoB,cAAc9D,EAAEgI,MAAM,CAACtI,KAAK;IAC9B,GACA;QAACa;QAAUyD;QAAmBzC;QAAmBY;QAAaO;KAAiB;IAGjF,IAAM2F,sBAAsB5H,OAAM6E,WAAW,CAC3C,SAACV;QACC,IAAIA,MAAM4B,GAAG,CAAC5H,MAAM,KAAK,KAAKgG,MAAM4B,GAAG,KAAK,KAAK;YAC/CD,gBAAgB3B,MAAM4B,GAAG;YACzB;QACF;QAEA;YAAC;YAAW;YAAa;YAAU;SAAQ,CAACpB,QAAQ,CAACR,MAAM4B,GAAG,KAC5DJ,qBACAxB,MAAM3E,cAAc;QAEtB,OAAQ2E,MAAM4B,GAAG;YACf,KAAK;gBACH,IAAI7F,QAAQ;oBACVyF,qBAAqBqB,YAAY;gBACnC,OAAO;oBACLP;gBACF;gBACA;YACF,KAAK;gBACH,IAAIvG,QAAQ;oBACVyF,qBAAqBqB,YAAY;gBACnC,OAAO;oBACLP;gBACF;gBACA;YACF,KAAK;gBACHJ;gBACA;YACF,KAAK;YACL,KAAK;YACL,KAAK;gBACH,IAAInG,QAAQ;oBACVyF,qBAAqBa;gBACvB,OAAO;oBACLC;gBACF;gBACA;QACJ;IACF,GACA;QAACd;QAAiBU;QAAOW;QAAalB;QAAiBW;QAAMvG;QAAQsG;KAAc;IAGrF,IAAMqB,oBAAoB7H,OAAM6E,WAAW,CACzC,SAACtF;YAEGA;QADF,IAAMwF,QAAQ+C,MAAMC,SAAS,CAACC,OAAO,CAACC,IAAI,EACxC1I,8BAAAA,EAAEmI,aAAa,CAACQ,UAAU,cAA1B3I,kDAAAA,4BAA4BqB,QAAQ,EACpCrB,EAAEmI,aAAa;QAEjB,IAAMrJ,SAASJ,OAAO,CAAC8G,MAAM;QAE7B,IAAI1G,UAAU,CAACA,OAAOE,QAAQ,EAAE;YAC9B+H,aAAavB;QACf;IACF,GACA;QAAC9G;QAASqI;KAAa;IAGzB,IAAM6B,oBAAoBnI,OAAM6E,WAAW,CACzC,SAACtF;YAEgCA;QAD/BkG,mBACEqC,MAAMC,SAAS,CAACC,OAAO,CAACC,IAAI,EAAC1I,8BAAAA,EAAEmI,aAAa,CAACQ,UAAU,cAA1B3I,kDAAAA,4BAA4BqB,QAAQ,EAAErB,EAAEmI,aAAa,GAClF;IAEJ,GACA;QAACjC;KAAmB;IAGtB,IAAMhE,eAAezB,OAAM6E,WAAW,CACpC,SAACxG,QAAqC0G;QACpC,IAAMqD,UAAUrD,UAAU/B;QAC1B,IAAMwB,WAAWO,UAAUjB;QAE3B,qBACE,qBAAC9D,OAAMqI,QAAQ;YAACtC,KAAK,AAAC,GAAe,OAAb1H,OAAOY,KAAK;WACjCuC,iBAAiB;YAChBnD,QAAAA;YACA+J,SAAAA;YACAxH,UAAUvC,OAAO8H,KAAK;YACtB3B,UAAAA;YACAjG,UAAUF,OAAOE,QAAQ;YACzBsI,SAASgB;YACTS,aAAahJ;YACb,kDAAkD;YAClD,kHAAkH;YAClH,sGAAsG;YACtG,qHAAqH;YACrH,+BAA+B;YAC/B,0IAA0I;YAC1I,oDAAoD;YACpD,kGAAkG;YAClGiJ,aAAaJ;QACf;IAGN,GACA;QACEnF;QACA6E;QACAM;QACA3G;QACAsC;KACD;IAGH,IAAM0E,kBAAkBxI,OAAMyE,OAAO,CAAC;QACpC,IAAMgE,yBACJxK,CAAAA,oBAAAA,8BAAAA,QAASE,MAAM,IAAG,IAChBF,QAAQc,GAAG,CAAC0C,8BAEZ,qBAACiH,kBAAQ;YAACpI,SAAS;WAAkCqB;QAGzD,IAAI,OAAOZ,mBAAmB,YAAY;YACxC,OAAOA,eAAe;gBAAE0H,wBAAAA;YAAuB;QACjD,OAAO;YACL,OAAOA;QACT;IACF,GAAG;QAAC9G;QAAW1D;QAAS8C;QAAgBU;KAAa;IAErD,IAAMkH,qBAAqBxF,uBAAuB/D,MAAMH,KAAK,KAAK;IAClE,IAAM2J,uBAAuB,CAACzF,uBAAuBI,sBAAsB;IAC3E,IAAMsF,mBACJ5G,oBAAoB,CAAC/B,UAAWyI,CAAAA,sBAAsBC,oBAAmB;IAE3E,IAAME,cAAc9I,OAAMyE,OAAO,CAAC;QAChC,IAAI,CAACoE,kBAAkB;YACrB,OAAO;QACT;QAEA,qBACE,qBAAC9G;YACCzB,WAAWwB,aAAaoB,6CAAiDA;YACzE2D,SAAS;uBAAMrD,qBAAqB;;;IAG1C,GAAG;QAACqF;QAAkB9G;QAAaD;KAAS;IAE5C,IAAMD,OAAO7B,OAAMyE,OAAO,CAAC;QACzB,IAAI3C,aAAaoB,WAAW;YAC1B,OAAOpB;QACT;QAEA,qBACE,qBAACiH,0BAAY;YACXzI,WAAWuI,uDAA2D3F;YACtEhD,QAAQA;;IAGd,GAAG;QAAC2I;QAAkB/G;QAAU5B;KAAO;IAEvC,IAAM8I,aAAa,AAACnH,CAAAA,QAAQgH,gBAAe,mBACzC,qBAAC7I,OAAMqI,QAAQ,QACZS,aACAjH;IAIL,qBACE,qBAACsE;QACC7F,WAAW2I,IAAAA,gBAAU,sBAEnBxG,UAAU3E,oBAAQ,CAACoL,OAAO,IAAItL,eAAe,CAAC6E,MAAM,EACpDnC;QAEFI,OAAOA;QACPmF,KAAKjD;QACLiE,SAASQ;OAERnH,UAAUqB,2BACT,qBAAC4H,YAAK,8CACA/G;QACJgH,WAAAA;QACA1C,QAAQA;QACRpG,WAAWoE;QACXzF,OAAOY;QACPwJ,WAAW1B;QACXhH,UAAUE;QACV,kIAAkI;QAClI,4FAA4F;QAC5F,wGAAwG;QACxGgG,SAASzH,MAAMyH,OAAO;QACtBzG,QAAQA;QACRkJ,OAAON;QACPO,MAAMC,IAAAA,sCAA8B,EAACpI;wBAGvC,qBAACqI,4BAAa,8CACRrH;QACJsH,eAAAA;QACA7C,SAASA;QACTwC,WAAWzB;QACX+B,SAAS7C;QACTF,SAASA;QACTF,QAAQA;QACRpG,WAAWoE;QACXtE,QAAQA;QACRkJ,OAAON;QACP5H,YAAYA;QAEXoD,qBAAAA,+BAAAA,SAAU2B,KAAK,iBAGpB,qBAACyD;QACC/D,KAAK9C;QACL1C,MAAMA;QACNM,UAAU6G;QACVd,QAAQtH,MAAMsH,MAAM;QACpBE,SAASxH,MAAMwH,OAAO;QACtBC,SAASzH,MAAMyH,OAAO;QACtB5H,OAAOsE;QACPmG,eAAAA;QACApJ,SAAS;OAER2B,kCAAoB,qBAAC5D;QAAO0H,KAAI;QAAG9G,OAAM;QACzCyC,YAAY3C,GAAG,CAAC,SAACC;6BAChB,qBAACX;YAAO0H,KAAK,AAAC,GAAa,OAAX/G,KAAKC,KAAK;YAAIA,OAAOD,KAAKC,KAAK;;SAGlDiB,wBACC,qBAAC2J,0CAAoB;QACnBC,WAAWpH;QACXqH,WAAWtJ;QACXqC,cAAc8C;QACdoE,mBAAmBpG;QACnBqG,cAActD;QACdzF,UAAUA;QACVgJ,gBAAgBhI;QAChBiI,WAAWhI;QACXiI,aAAajJ;QACbE,mBAAmBA;QACnBC,wBAAwBA;OAEvBkH;AAKX"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { HasComponent, HasRef } from '../../types';
|
|
3
|
-
export type FormLayoutProps = React.AllHTMLAttributes<HTMLElement> & HasRef<HTMLElement> & HasComponent;
|
|
2
|
+
import { HasComponent, HasRef, HasRootRef } from '../../types';
|
|
3
|
+
export type FormLayoutProps = React.AllHTMLAttributes<HTMLElement> & HasRef<HTMLElement> & HasRootRef<HTMLElement> & HasComponent;
|
|
4
4
|
/**
|
|
5
5
|
* @see https://vkcom.github.io/VKUI/#/FormLayout
|
|
6
6
|
*/
|
|
7
|
-
export declare const FormLayout: ({ children, Component, getRef, onSubmit, className, ...restProps }: FormLayoutProps) => React.JSX.Element;
|
|
7
|
+
export declare const FormLayout: ({ children, Component, getRef, getRootRef, onSubmit, className, ...restProps }: FormLayoutProps) => React.JSX.Element;
|
|
8
8
|
//# sourceMappingURL=FormLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/FormLayout/FormLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"FormLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/FormLayout/FormLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK/D,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAChE,MAAM,CAAC,WAAW,CAAC,GACnB,UAAU,CAAC,WAAW,CAAC,GACvB,YAAY,CAAC;AAEf;;GAEG;AACH,eAAO,MAAM,UAAU,mFAQpB,eAAe,sBAgBjB,CAAC"}
|
|
@@ -14,21 +14,24 @@ var _object_spread_props = require("@swc/helpers/_/_object_spread_props");
|
|
|
14
14
|
var _object_without_properties = require("@swc/helpers/_/_object_without_properties");
|
|
15
15
|
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
16
16
|
var _vkjs = require("@vkontakte/vkjs");
|
|
17
|
+
var _useExternRef = require("../../hooks/useExternRef");
|
|
17
18
|
var preventDefault = function(e) {
|
|
18
19
|
return e.preventDefault();
|
|
19
20
|
};
|
|
20
21
|
var FormLayout = function(_param) {
|
|
21
|
-
var children = _param.children, _param_Component = _param.Component, Component = _param_Component === void 0 ? "form" : _param_Component, getRef = _param.getRef, _param_onSubmit = _param.onSubmit, onSubmit = _param_onSubmit === void 0 ? preventDefault : _param_onSubmit, className = _param.className, restProps = _object_without_properties._(_param, [
|
|
22
|
+
var children = _param.children, _param_Component = _param.Component, Component = _param_Component === void 0 ? "form" : _param_Component, getRef = _param.getRef, getRootRef = _param.getRootRef, _param_onSubmit = _param.onSubmit, onSubmit = _param_onSubmit === void 0 ? preventDefault : _param_onSubmit, className = _param.className, restProps = _object_without_properties._(_param, [
|
|
22
23
|
"children",
|
|
23
24
|
"Component",
|
|
24
25
|
"getRef",
|
|
26
|
+
"getRootRef",
|
|
25
27
|
"onSubmit",
|
|
26
28
|
"className"
|
|
27
29
|
]);
|
|
30
|
+
var formLayoutRef = (0, _useExternRef.useExternRef)(getRef, getRootRef);
|
|
28
31
|
return /*#__PURE__*/ _react.createElement(Component, _object_spread_props._(_object_spread._({}, restProps), {
|
|
29
32
|
className: (0, _vkjs.classNames)("vkuiFormLayout", className),
|
|
30
33
|
onSubmit: onSubmit,
|
|
31
|
-
ref:
|
|
34
|
+
ref: formLayoutRef
|
|
32
35
|
}), children, Component === "form" && /*#__PURE__*/ _react.createElement("input", {
|
|
33
36
|
type: "submit",
|
|
34
37
|
className: "vkuiFormLayout__submit",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/FormLayout/FormLayout.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { HasComponent, HasRef } from '../../types';\nimport styles from './FormLayout.module.css';\n\nconst preventDefault = (e: React.FormEvent) => e.preventDefault();\n\nexport type FormLayoutProps = React.AllHTMLAttributes<HTMLElement> &\n HasRef<HTMLElement> &\n HasComponent;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FormLayout\n */\nexport const FormLayout = ({\n children,\n Component = 'form',\n getRef,\n onSubmit = preventDefault,\n className,\n ...restProps\n}: FormLayoutProps) => {\n return (\n <Component\n {...restProps}\n className={classNames(styles['FormLayout'], className)}\n onSubmit={onSubmit}\n ref={
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/FormLayout/FormLayout.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { HasComponent, HasRef, HasRootRef } from '../../types';\nimport styles from './FormLayout.module.css';\n\nconst preventDefault = (e: React.FormEvent) => e.preventDefault();\n\nexport type FormLayoutProps = React.AllHTMLAttributes<HTMLElement> &\n HasRef<HTMLElement> &\n HasRootRef<HTMLElement> &\n HasComponent;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FormLayout\n */\nexport const FormLayout = ({\n children,\n Component = 'form',\n getRef, // TOOD [>=6]: remove\n getRootRef,\n onSubmit = preventDefault,\n className,\n ...restProps\n}: FormLayoutProps) => {\n const formLayoutRef = useExternRef(getRef, getRootRef);\n\n return (\n <Component\n {...restProps}\n className={classNames(styles['FormLayout'], className)}\n onSubmit={onSubmit}\n ref={formLayoutRef}\n >\n {children}\n {Component === 'form' && (\n <input type=\"submit\" className={styles['FormLayout__submit']} value=\"\" />\n )}\n </Component>\n );\n};\n"],"names":["FormLayout","preventDefault","e","children","Component","getRef","getRootRef","onSubmit","className","restProps","formLayoutRef","useExternRef","classNames","ref","input","type","value"],"mappings":";;;;+BAgBaA;;;eAAAA;;;;;;;+DAhBU;oBACI;4BACE;AAI7B,IAAMC,iBAAiB,SAACC;WAAuBA,EAAED,cAAc;;AAUxD,IAAMD,aAAa;QACxBG,kBAAAA,oCACAC,WAAAA,0CAAY,2BACZC,gBAAAA,QACAC,oBAAAA,qCACAC,UAAAA,wCAAWN,kCACXO,mBAAAA,WACGC;QANHN;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,gBAAgBC,IAAAA,0BAAY,EAACN,QAAQC;IAE3C,qBACE,qBAACF,uDACKK;QACJD,WAAWI,IAAAA,gBAAU,oBAAuBJ;QAC5CD,UAAUA;QACVM,KAAKH;QAEJP,UACAC,cAAc,wBACb,qBAACU;QAAMC,MAAK;QAASP,SAAS;QAAgCQ,OAAM;;AAI5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Gallery.d.ts","sourceRoot":"","sources":["../../../../src/components/Gallery/Gallery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Gallery.d.ts","sourceRoot":"","sources":["../../../../src/components/Gallery/Gallery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,kFAQjB,YAAY,6BAqDd,CAAC"}
|
|
@@ -16,9 +16,9 @@ var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
|
|
|
16
16
|
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
17
17
|
var _math = require("../../helpers/math");
|
|
18
18
|
var _useIsClient = require("../../hooks/useIsClient");
|
|
19
|
-
var _useTimeout = require("../../hooks/useTimeout");
|
|
20
19
|
var _BaseGallery = require("../BaseGallery/BaseGallery");
|
|
21
20
|
var _CarouselBase = require("../BaseGallery/CarouselBase/CarouselBase");
|
|
21
|
+
var _hooks = require("./hooks");
|
|
22
22
|
var Gallery = function(_param) {
|
|
23
23
|
var _param_initialSlideIndex = _param.initialSlideIndex, initialSlideIndex = _param_initialSlideIndex === void 0 ? 0 : _param_initialSlideIndex, children = _param.children, _param_timeout = _param.timeout, timeout = _param_timeout === void 0 ? 0 : _param_timeout, onChange = _param.onChange, bullets = _param.bullets, looped = _param.looped, props = _object_without_properties._(_param, [
|
|
24
24
|
"initialSlideIndex",
|
|
@@ -53,16 +53,9 @@ var Gallery = function(_param) {
|
|
|
53
53
|
onChange,
|
|
54
54
|
slideIndex
|
|
55
55
|
]);
|
|
56
|
-
|
|
56
|
+
(0, _hooks.useAutoPlay)(timeout, slideIndex, function() {
|
|
57
57
|
return handleChange((slideIndex + 1) % childCount);
|
|
58
|
-
}
|
|
59
|
-
_react.useEffect(function() {
|
|
60
|
-
return timeout ? autoplay.set() : autoplay.clear();
|
|
61
|
-
}, [
|
|
62
|
-
timeout,
|
|
63
|
-
slideIndex,
|
|
64
|
-
autoplay
|
|
65
|
-
]);
|
|
58
|
+
});
|
|
66
59
|
// prevent invalid slideIndex
|
|
67
60
|
// any slide index is invalid with no slides, just keep it as is
|
|
68
61
|
var safeSlideIndex = childCount > 0 ? (0, _math.clamp)(slideIndex, 0, childCount - 1) : slideIndex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Gallery/Gallery.tsx"],"sourcesContent":["import * as React from 'react';\nimport { clamp } from '../../helpers/math';\nimport { useIsClient } from '../../hooks/useIsClient';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Gallery/Gallery.tsx"],"sourcesContent":["import * as React from 'react';\nimport { clamp } from '../../helpers/math';\nimport { useIsClient } from '../../hooks/useIsClient';\nimport { BaseGallery } from '../BaseGallery/BaseGallery';\nimport { CarouselBase } from '../BaseGallery/CarouselBase/CarouselBase';\nimport { BaseGalleryProps } from '../BaseGallery/types';\nimport { useAutoPlay } from './hooks';\n\nexport interface GalleryProps extends BaseGalleryProps {\n initialSlideIndex?: number;\n timeout?: number;\n // Отвечает за зацикливание слайдов\n looped?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Gallery\n */\nexport const Gallery = ({\n initialSlideIndex = 0,\n children,\n timeout = 0,\n onChange,\n bullets,\n looped,\n ...props\n}: GalleryProps) => {\n const [localSlideIndex, setSlideIndex] = React.useState(initialSlideIndex);\n const isControlled = typeof props.slideIndex === 'number';\n const slideIndex = isControlled ? props.slideIndex ?? 0 : localSlideIndex;\n const isDraggable = !isControlled || Boolean(onChange);\n const slides = React.useMemo(\n () => React.Children.toArray(children).filter((item) => Boolean(item)),\n [children],\n );\n const childCount = slides.length;\n const isClient = useIsClient();\n\n const handleChange: GalleryProps['onChange'] = React.useCallback(\n (current: number) => {\n if (current === slideIndex) {\n return;\n }\n !isControlled && setSlideIndex(current);\n onChange && onChange(current);\n },\n [isControlled, onChange, slideIndex],\n );\n\n useAutoPlay(timeout, slideIndex, () => handleChange((slideIndex + 1) % childCount));\n\n // prevent invalid slideIndex\n // any slide index is invalid with no slides, just keep it as is\n const safeSlideIndex = childCount > 0 ? clamp(slideIndex, 0, childCount - 1) : slideIndex;\n // notify parent in controlled mode\n React.useEffect(() => {\n if (onChange && safeSlideIndex !== slideIndex) {\n onChange(safeSlideIndex);\n }\n setSlideIndex(safeSlideIndex);\n }, [onChange, safeSlideIndex, slideIndex]);\n\n if (!isClient) {\n return null;\n }\n\n const Component = looped ? CarouselBase : BaseGallery;\n\n return (\n <Component\n isDraggable={isDraggable}\n {...props}\n bullets={childCount > 0 && bullets}\n slideIndex={safeSlideIndex}\n onChange={handleChange}\n >\n {slides}\n </Component>\n );\n};\n"],"names":["Gallery","initialSlideIndex","children","timeout","onChange","bullets","looped","props","React","useState","localSlideIndex","setSlideIndex","isControlled","slideIndex","isDraggable","Boolean","slides","useMemo","Children","toArray","filter","item","childCount","length","isClient","useIsClient","handleChange","useCallback","current","useAutoPlay","safeSlideIndex","clamp","useEffect","Component","CarouselBase","BaseGallery"],"mappings":";;;;+BAkBaA;;;eAAAA;;;;;;;;+DAlBU;oBACD;2BACM;2BACA;4BACC;qBAED;AAYrB,IAAMA,UAAU;0CACrBC,mBAAAA,0DAAoB,8BACpBC,kBAAAA,kCACAC,SAAAA,sCAAU,oBACVC,kBAAAA,UACAC,iBAAAA,SACAC,gBAAAA,QACGC;QANHN;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAyCE,qCAAAA,OAAMC,QAAQ,CAACR,wBAAjDS,kBAAkCF,oBAAjBG,gBAAiBH;IACzC,IAAMI,eAAe,OAAOL,MAAMM,UAAU,KAAK;QACfN;IAAlC,IAAMM,aAAaD,eAAeL,CAAAA,oBAAAA,MAAMM,UAAU,cAAhBN,+BAAAA,oBAAoB,IAAIG;IAC1D,IAAMI,cAAc,CAACF,gBAAgBG,QAAQX;IAC7C,IAAMY,SAASR,OAAMS,OAAO,CAC1B;eAAMT,OAAMU,QAAQ,CAACC,OAAO,CAACjB,UAAUkB,MAAM,CAAC,SAACC;mBAASN,QAAQM;;OAChE;QAACnB;KAAS;IAEZ,IAAMoB,aAAaN,OAAOO,MAAM;IAChC,IAAMC,WAAWC,IAAAA,wBAAW;IAE5B,IAAMC,eAAyClB,OAAMmB,WAAW,CAC9D,SAACC;QACC,IAAIA,YAAYf,YAAY;YAC1B;QACF;QACA,CAACD,gBAAgBD,cAAciB;QAC/BxB,YAAYA,SAASwB;IACvB,GACA;QAAChB;QAAcR;QAAUS;KAAW;IAGtCgB,IAAAA,kBAAW,EAAC1B,SAASU,YAAY;eAAMa,aAAa,AAACb,CAAAA,aAAa,CAAA,IAAKS;;IAEvE,6BAA6B;IAC7B,gEAAgE;IAChE,IAAMQ,iBAAiBR,aAAa,IAAIS,IAAAA,WAAK,EAAClB,YAAY,GAAGS,aAAa,KAAKT;IAC/E,mCAAmC;IACnCL,OAAMwB,SAAS,CAAC;QACd,IAAI5B,YAAY0B,mBAAmBjB,YAAY;YAC7CT,SAAS0B;QACX;QACAnB,cAAcmB;IAChB,GAAG;QAAC1B;QAAU0B;QAAgBjB;KAAW;IAEzC,IAAI,CAACW,UAAU;QACb,OAAO;IACT;IAEA,IAAMS,YAAY3B,SAAS4B,0BAAY,GAAGC,wBAAW;IAErD,qBACE,qBAACF;QACCnB,aAAaA;OACTP;QACJF,SAASiB,aAAa,KAAKjB;QAC3BQ,YAAYiB;QACZ1B,UAAUsB;QAETV;AAGP"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../src/components/Gallery/hooks.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,QAkCxF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "useAutoPlay", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return useAutoPlay;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
12
|
+
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
13
|
+
var _useTimeout = require("../../hooks/useTimeout");
|
|
14
|
+
var _dom = require("../../lib/dom");
|
|
15
|
+
function useAutoPlay(timeout, slideIndex, callbackFn) {
|
|
16
|
+
var _useTimeout1 = (0, _useTimeout.useTimeout)(callbackFn, timeout), clearAutoPlay = _useTimeout1.clear, setAutoPlay = _useTimeout1.set;
|
|
17
|
+
var document = (0, _dom.useDOM)().document;
|
|
18
|
+
_react.useEffect(function() {
|
|
19
|
+
return timeout ? setAutoPlay() : clearAutoPlay();
|
|
20
|
+
}, [
|
|
21
|
+
timeout,
|
|
22
|
+
slideIndex,
|
|
23
|
+
clearAutoPlay,
|
|
24
|
+
setAutoPlay
|
|
25
|
+
]);
|
|
26
|
+
// Отключаем прокрутку слайдов при неактивной вкладке
|
|
27
|
+
_react.useEffect(function preventSlideChange() {
|
|
28
|
+
if (!document || !timeout) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
var changeAutoPlay = function() {
|
|
32
|
+
if (document.visibilityState === "visible") {
|
|
33
|
+
clearAutoPlay();
|
|
34
|
+
setAutoPlay();
|
|
35
|
+
}
|
|
36
|
+
if (document.visibilityState === "hidden") {
|
|
37
|
+
clearAutoPlay();
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
document.addEventListener("visibilitychange", changeAutoPlay);
|
|
41
|
+
return function() {
|
|
42
|
+
document.removeEventListener("visibilitychange", changeAutoPlay);
|
|
43
|
+
};
|
|
44
|
+
}, [
|
|
45
|
+
document,
|
|
46
|
+
timeout,
|
|
47
|
+
clearAutoPlay,
|
|
48
|
+
setAutoPlay
|
|
49
|
+
]);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Gallery/hooks.ts"],"sourcesContent":["import * as React from 'react';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useDOM } from '../../lib/dom';\n\nexport function useAutoPlay(timeout: number, slideIndex: number, callbackFn: VoidFunction) {\n const { clear: clearAutoPlay, set: setAutoPlay } = useTimeout(callbackFn, timeout);\n const { document } = useDOM();\n\n React.useEffect(\n () => (timeout ? setAutoPlay() : clearAutoPlay()),\n [timeout, slideIndex, clearAutoPlay, setAutoPlay],\n );\n\n // Отключаем прокрутку слайдов при неактивной вкладке\n React.useEffect(\n function preventSlideChange() {\n if (!document || !timeout) {\n return;\n }\n\n const changeAutoPlay = () => {\n if (document.visibilityState === 'visible') {\n clearAutoPlay();\n setAutoPlay();\n }\n if (document.visibilityState === 'hidden') {\n clearAutoPlay();\n }\n };\n\n document.addEventListener('visibilitychange', changeAutoPlay);\n\n return () => {\n document.removeEventListener('visibilitychange', changeAutoPlay);\n };\n },\n [document, timeout, clearAutoPlay, setAutoPlay],\n );\n}\n"],"names":["useAutoPlay","timeout","slideIndex","callbackFn","useTimeout","clear","clearAutoPlay","set","setAutoPlay","document","useDOM","React","useEffect","preventSlideChange","changeAutoPlay","visibilityState","addEventListener","removeEventListener"],"mappings":";;;;+BAIgBA;;;eAAAA;;;;+DAJO;0BACI;mBACJ;AAEhB,SAASA,YAAYC,OAAe,EAAEC,UAAkB,EAAEC,UAAwB;IACvF,IAAmDC,eAAAA,IAAAA,sBAAU,EAACD,YAAYF,UAAlEI,AAAOC,gBAAoCF,aAA3CC,OAAsBE,AAAKC,cAAgBJ,aAArBG;IAC9B,IAAM,AAAEE,WAAaC,IAAAA,WAAM,IAAnBD;IAERE,OAAMC,SAAS,CACb;eAAOX,UAAUO,gBAAgBF;OACjC;QAACL;QAASC;QAAYI;QAAeE;KAAY;IAGnD,qDAAqD;IACrDG,OAAMC,SAAS,CACb,SAASC;QACP,IAAI,CAACJ,YAAY,CAACR,SAAS;YACzB;QACF;QAEA,IAAMa,iBAAiB;YACrB,IAAIL,SAASM,eAAe,KAAK,WAAW;gBAC1CT;gBACAE;YACF;YACA,IAAIC,SAASM,eAAe,KAAK,UAAU;gBACzCT;YACF;QACF;QAEAG,SAASO,gBAAgB,CAAC,oBAAoBF;QAE9C,OAAO;YACLL,SAASQ,mBAAmB,CAAC,oBAAoBH;QACnD;IACF,GACA;QAACL;QAAUR;QAASK;QAAeE;KAAY;AAEnD"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { HasRef } from '../../types';
|
|
2
|
+
import { HasRef, HasRootRef } from '../../types';
|
|
3
3
|
import { PanelHeaderProps } from '../PanelHeader/PanelHeader';
|
|
4
|
-
export interface ModalPageHeaderProps extends React.HTMLAttributes<HTMLDivElement>, Omit<PanelHeaderProps, 'fixed' | 'shadow'>, HasRef<HTMLDivElement> {
|
|
4
|
+
export interface ModalPageHeaderProps extends React.HTMLAttributes<HTMLDivElement>, Omit<PanelHeaderProps, 'fixed' | 'shadow'>, HasRef<HTMLDivElement>, HasRootRef<HTMLDivElement> {
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
7
|
* @see https://vkcom.github.io/VKUI/#/ModalPageHeader
|
|
8
8
|
*/
|
|
9
|
-
export declare const ModalPageHeader: ({ children, separator, getRef, className, typographyProps, ...restProps }: ModalPageHeaderProps) => React.JSX.Element;
|
|
9
|
+
export declare const ModalPageHeader: ({ children, separator, getRef, getRootRef, className, typographyProps, ...restProps }: ModalPageHeaderProps) => React.JSX.Element;
|
|
10
10
|
//# sourceMappingURL=ModalPageHeader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalPageHeader.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ModalPageHeader.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAe,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAI3E,MAAM,WAAW,oBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC,EAC1C,MAAM,CAAC,cAAc,CAAC,EACtB,UAAU,CAAC,cAAc,CAAC;CAAG;AAEjC;;GAEG;AACH,eAAO,MAAM,eAAe,0FAQzB,oBAAoB,sBAiCtB,CAAC"}
|
|
@@ -15,16 +15,18 @@ var _object_without_properties = require("@swc/helpers/_/_object_without_propert
|
|
|
15
15
|
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
16
16
|
var _vkjs = require("@vkontakte/vkjs");
|
|
17
17
|
var _useAdaptivityWithJSMediaQueries = require("../../hooks/useAdaptivityWithJSMediaQueries");
|
|
18
|
+
var _useExternRef = require("../../hooks/useExternRef");
|
|
18
19
|
var _usePlatform = require("../../hooks/usePlatform");
|
|
19
20
|
var _platform = require("../../lib/platform");
|
|
20
21
|
var _ModalPageContext = require("../ModalPage/ModalPageContext");
|
|
21
22
|
var _PanelHeader = require("../PanelHeader/PanelHeader");
|
|
22
23
|
var _Separator = require("../Separator/Separator");
|
|
23
24
|
var ModalPageHeader = function(_param) {
|
|
24
|
-
var children = _param.children, _param_separator = _param.separator, separator = _param_separator === void 0 ? true : _param_separator, getRef = _param.getRef, className = _param.className, typographyProps = _param.typographyProps, restProps = _object_without_properties._(_param, [
|
|
25
|
+
var children = _param.children, _param_separator = _param.separator, separator = _param_separator === void 0 ? true : _param_separator, getRef = _param.getRef, getRootRef = _param.getRootRef, className = _param.className, typographyProps = _param.typographyProps, restProps = _object_without_properties._(_param, [
|
|
25
26
|
"children",
|
|
26
27
|
"separator",
|
|
27
28
|
"getRef",
|
|
29
|
+
"getRootRef",
|
|
28
30
|
"className",
|
|
29
31
|
"typographyProps"
|
|
30
32
|
]);
|
|
@@ -32,9 +34,10 @@ var ModalPageHeader = function(_param) {
|
|
|
32
34
|
var hasSeparator = separator && platform === _platform.Platform.VKCOM;
|
|
33
35
|
var isDesktop = (0, _useAdaptivityWithJSMediaQueries.useAdaptivityWithJSMediaQueries)().isDesktop;
|
|
34
36
|
var labelId = _react.useContext(_ModalPageContext.ModalPageContext).labelId;
|
|
37
|
+
var modalPageHeaderRef = (0, _useExternRef.useExternRef)(getRef, getRootRef);
|
|
35
38
|
return /*#__PURE__*/ _react.createElement("div", {
|
|
36
39
|
className: (0, _vkjs.classNames)("vkuiModalPageHeader", platform !== _platform.Platform.VKCOM && "vkuiModalPageHeader--withGaps", isDesktop && "vkuiModalPageHeader--desktop"),
|
|
37
|
-
ref:
|
|
40
|
+
ref: modalPageHeaderRef
|
|
38
41
|
}, /*#__PURE__*/ _react.createElement(_PanelHeader.PanelHeader, _object_spread_props._(_object_spread._({
|
|
39
42
|
className: (0, _vkjs.classNames)("vkuiInternalModalPageHeader__in", className),
|
|
40
43
|
typographyProps: _object_spread._({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasRef } from '../../types';\nimport { ModalPageContext } from '../ModalPage/ModalPageContext';\nimport { PanelHeader, PanelHeaderProps } from '../PanelHeader/PanelHeader';\nimport { Separator } from '../Separator/Separator';\nimport styles from './ModalPageHeader.module.css';\n\nexport interface ModalPageHeaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<PanelHeaderProps, 'fixed' | 'shadow'>,\n HasRef<HTMLDivElement> {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalPageHeader\n */\nexport const ModalPageHeader = ({\n children,\n separator = true,\n getRef,\n className,\n typographyProps,\n ...restProps\n}: ModalPageHeaderProps) => {\n const platform = usePlatform();\n const hasSeparator = separator && platform === Platform.VKCOM;\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const { labelId } = React.useContext(ModalPageContext);\n\n return (\n <div\n className={classNames(\n styles['ModalPageHeader'],\n platform !== Platform.VKCOM && styles['ModalPageHeader--withGaps'],\n isDesktop && styles['ModalPageHeader--desktop'],\n )}\n ref={
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasRef, HasRootRef } from '../../types';\nimport { ModalPageContext } from '../ModalPage/ModalPageContext';\nimport { PanelHeader, PanelHeaderProps } from '../PanelHeader/PanelHeader';\nimport { Separator } from '../Separator/Separator';\nimport styles from './ModalPageHeader.module.css';\n\nexport interface ModalPageHeaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<PanelHeaderProps, 'fixed' | 'shadow'>,\n HasRef<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalPageHeader\n */\nexport const ModalPageHeader = ({\n children,\n separator = true,\n getRef, // TODO [>=6]: remove\n getRootRef,\n className,\n typographyProps,\n ...restProps\n}: ModalPageHeaderProps) => {\n const platform = usePlatform();\n const hasSeparator = separator && platform === Platform.VKCOM;\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const { labelId } = React.useContext(ModalPageContext);\n const modalPageHeaderRef = useExternRef(getRef, getRootRef);\n\n return (\n <div\n className={classNames(\n styles['ModalPageHeader'],\n platform !== Platform.VKCOM && styles['ModalPageHeader--withGaps'],\n isDesktop && styles['ModalPageHeader--desktop'],\n )}\n ref={modalPageHeaderRef}\n >\n <PanelHeader\n className={classNames('vkuiInternalModalPageHeader__in', className)}\n typographyProps={{\n Component: 'h2',\n id: labelId,\n ...typographyProps,\n }}\n {...restProps}\n fixed={false}\n separator={false}\n transparent\n >\n {children}\n </PanelHeader>\n {hasSeparator && <Separator wide />}\n </div>\n );\n};\n"],"names":["ModalPageHeader","children","separator","getRef","getRootRef","className","typographyProps","restProps","platform","usePlatform","hasSeparator","Platform","VKCOM","isDesktop","useAdaptivityWithJSMediaQueries","labelId","React","useContext","ModalPageContext","modalPageHeaderRef","useExternRef","div","classNames","ref","PanelHeader","Component","id","fixed","transparent","Separator","wide"],"mappings":";;;;+BAqBaA;;;eAAAA;;;;;;;+DArBU;oBACI;+CACqB;4BACnB;2BACD;wBACH;gCAEQ;2BACa;yBACpB;AAYnB,IAAMA,kBAAkB;QAC7BC,kBAAAA,oCACAC,WAAAA,0CAAY,yBACZC,gBAAAA,QACAC,oBAAAA,YACAC,mBAAAA,WACAC,yBAAAA,iBACGC;QANHN;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWC,IAAAA,wBAAW;IAC5B,IAAMC,eAAeR,aAAaM,aAAaG,kBAAQ,CAACC,KAAK;IAC7D,IAAM,AAAEC,YAAcC,IAAAA,gEAA+B,IAA7CD;IACR,IAAM,AAAEE,UAAYC,OAAMC,UAAU,CAACC,kCAAgB,EAA7CH;IACR,IAAMI,qBAAqBC,IAAAA,0BAAY,EAACjB,QAAQC;IAEhD,qBACE,qBAACiB;QACChB,WAAWiB,IAAAA,gBAAU,yBAEnBd,aAAaG,kBAAQ,CAACC,KAAK,qCAC3BC;QAEFU,KAAKJ;qBAEL,qBAACK,wBAAW;QACVnB,WAAWiB,IAAAA,gBAAU,EAAC,mCAAmCjB;QACzDC,iBAAiB;YACfmB,WAAW;YACXC,IAAIX;WACDT;OAEDC;QACJoB,OAAO;QACPzB,WAAW;QACX0B,aAAAA;QAEC3B,WAEFS,8BAAgB,qBAACmB,oBAAS;QAACC,MAAAA;;AAGlC"}
|
|
@@ -446,7 +446,7 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
|
|
|
446
446
|
}
|
|
447
447
|
modalState.translateY = translateY;
|
|
448
448
|
modalState.translateYCurrent = translateY;
|
|
449
|
-
modalState.collapsed = translateY
|
|
449
|
+
modalState.collapsed = numberInRange(translateY, modalState.collapsedRange);
|
|
450
450
|
modalState.expanded = translateY === 0;
|
|
451
451
|
modalState.hidden = translateY === 100;
|
|
452
452
|
if (modalState.hidden) {
|
|
@@ -636,6 +636,7 @@ function initPageModal(modalState) {
|
|
|
636
636
|
var expandedRange;
|
|
637
637
|
var collapsedRange;
|
|
638
638
|
var hiddenRange;
|
|
639
|
+
var hasCollapsedState = Boolean(modalState.expandable && modalState.settlingHeight !== 100);
|
|
639
640
|
if (modalState.expandable) {
|
|
640
641
|
var _modalState_settlingHeight;
|
|
641
642
|
translateYFrom = 100 - ((_modalState_settlingHeight = modalState.settlingHeight) !== null && _modalState_settlingHeight !== void 0 ? _modalState_settlingHeight : 0);
|
|
@@ -645,15 +646,15 @@ function initPageModal(modalState) {
|
|
|
645
646
|
0,
|
|
646
647
|
shiftHalf
|
|
647
648
|
];
|
|
648
|
-
collapsedRange = [
|
|
649
|
+
collapsedRange = hasCollapsedState ? [
|
|
649
650
|
shiftHalf,
|
|
650
651
|
translateYFrom + visiblePart / 4
|
|
651
|
-
];
|
|
652
|
+
] : undefined;
|
|
652
653
|
hiddenRange = [
|
|
653
654
|
translateYFrom + visiblePart / 4,
|
|
654
655
|
100
|
|
655
656
|
];
|
|
656
|
-
collapsed = translateYFrom > 0;
|
|
657
|
+
collapsed = hasCollapsedState && translateYFrom > 0;
|
|
657
658
|
expanded = translateYFrom <= 0;
|
|
658
659
|
translateY = translateYFrom;
|
|
659
660
|
} else {
|
|
@@ -668,10 +669,7 @@ function initPageModal(modalState) {
|
|
|
668
669
|
translateY,
|
|
669
670
|
translateY + 25
|
|
670
671
|
];
|
|
671
|
-
collapsedRange =
|
|
672
|
-
translateY + 25,
|
|
673
|
-
translateY + 25
|
|
674
|
-
];
|
|
672
|
+
collapsedRange = undefined;
|
|
675
673
|
hiddenRange = [
|
|
676
674
|
translateY + 25,
|
|
677
675
|
translateY + 100
|