@vkontakte/vkui 5.0.1 → 5.0.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.js +13 -9
- package/dist/cjs/components/Alert/Alert.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/cjs/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js +3 -2
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cjs/components/Tappable/Tappable.d.ts +2 -2
- package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
- package/dist/cjs/lib/utils.d.ts +0 -1
- package/dist/cjs/lib/utils.js +0 -5
- package/dist/cjs/lib/utils.js.map +1 -1
- package/dist/cjs/types.d.ts +6 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/components/Alert/Alert.d.ts +3 -3
- package/dist/components/Alert/Alert.js +13 -9
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js +4 -3
- package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/components/Tappable/Tappable.d.ts +2 -2
- package/dist/components/Tappable/Tappable.js.map +1 -1
- package/dist/components.css +2 -2
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/Alert/Alert.d.ts +3 -3
- package/dist/cssm/components/Alert/Alert.js +13 -9
- package/dist/cssm/components/Alert/Alert.js.map +1 -1
- package/dist/cssm/components/Banner/Banner.module.css +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/cssm/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.module.css +1 -1
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js +4 -3
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cssm/components/SubnavigationButton/SubnavigationButton.module.css +1 -1
- package/dist/cssm/components/Tappable/Tappable.d.ts +2 -2
- package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
- package/dist/cssm/lib/utils.d.ts +0 -1
- package/dist/cssm/lib/utils.js +0 -3
- package/dist/cssm/lib/utils.js.map +1 -1
- package/dist/cssm/styles/components.css +2 -2
- package/dist/cssm/types.d.ts +6 -0
- package/dist/cssm/types.js.map +1 -1
- package/dist/lib/utils.d.ts +0 -1
- package/dist/lib/utils.js +0 -3
- package/dist/lib/utils.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.js.map +1 -1
- package/dist/vkui.css +2 -2
- package/dist/vkui.css.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomSelect.js","names":["React","SelectMimicry","debounce","multiRef","getTitleFromChildren","classNamesString","CustomSelectOption","Input","DropdownIcon","Footnote","warnOnce","defaultFilterFn","getFormFieldModeFromSelectType","CustomSelectDropdown","useIsomorphicLayoutEffect","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","CustomSelect","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","onInputChange","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","icon","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","containerRef","useRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","placeholder"],"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { SelectMimicry } from \"../SelectMimicry/SelectMimicry\";\nimport { debounce, multiRef, getTitleFromChildren } from \"../../lib/utils\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { NativeSelectProps } from \"../NativeSelect/NativeSelect\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { FormFieldProps } from \"../FormField/FormField\";\nimport { Input } from \"../Input/Input\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport {\n defaultFilterFn,\n getFormFieldModeFromSelectType,\n} from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { TrackerOptionsProps } from \"../CustomScrollView/useTrackerVisibility\";\nimport { SelectType } from \"../Select/Select\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport styles from \"./CustomSelect.module.css\";\n\nconst findIndexAfter = (\n options: CustomSelectOptionInterface[] = [],\n startIndex = -1\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce(\"CustomSelect\");\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n \"Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.\",\n \"error\"\n );\n }\n};\n\nfunction defaultRenderOptionFn({\n option,\n ...props\n}: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (\n e: React.MouseEvent<HTMLElement>\n) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue\n) {\n return (\n options.findIndex((item) => {\n value = typeof item.value === \"number\" ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: SelectProps[\"options\"],\n inputValue: string,\n filterFn: SelectProps[\"filterFn\"]\n) => {\n return typeof filterFn === \"function\"\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>[\"value\"];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface SelectProps\n extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[]\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (\n option: Partial<CustomSelectOptionInterface>\n ) => string\n ) => boolean);\n popupDirection?: \"top\" | \"bottom\";\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n icon?: React.ReactNode;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect(props: SelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = \"default\",\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = \"Ничего не найдено\",\n filterFn = defaultFilterFn,\n icon = <DropdownIcon opened={opened} />,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === \"development\") {\n checkOptionsValueType(optionsProp);\n }\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = React.useRef<HTMLSelectElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<\n number | undefined\n >(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(\n props.value !== undefined\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n props.value ?? props.defaultValue\n );\n const [keyboardInput, setKeyboardInput] = React.useState(\"\");\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<\n number | undefined\n >(findSelectedIndex(optionsProp, props.value ?? props.defaultValue));\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue(\n (nativeSelectValue) => props.value ?? nativeSelectValue\n );\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (nativeSelectValue !== undefined) {\n const event = new Event(\"change\", { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined\n ? options[selectedOptionIndex]\n : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n classNamesString(\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes(\"top\")\n ? styles[\"CustomSelect--pop-up\"]\n : styles[\"CustomSelect--pop-down\"])\n ),\n [dropdownOffsetDistance, opened, popperPlacement]\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput(\"\");\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length]\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (\n index === undefined ||\n index < 0 ||\n index > (options.length ?? 0) - 1\n ) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex\n );\n },\n [options, scrollToElement]\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (\n ref &&\n selectedOptionIndex !== undefined &&\n isValidIndex(selectedOptionIndex)\n ) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex]\n );\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label)\n .toLowerCase()\n .includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options]\n );\n\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue(\"\");\n setOpened(false);\n setFocusedOptionIndex(-1);\n setOptions(optionsProp);\n onClose?.();\n }, [onClose, optionsProp, resetKeyboardInput]);\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {\n const item = options[focusedOptionIndex];\n\n setNativeSelectValue(item?.value);\n close();\n }\n }, [close, focusedOptionIndex, isValidIndex, options]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === \"function\") {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event(\"blur\");\n selectElRef.current?.dispatchEvent(event);\n }, [close]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event(\"focus\");\n selectElRef.current?.dispatchEvent(event);\n }, []);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(\n () => debounce(resetKeyboardInput, 1000),\n [resetKeyboardInput]\n );\n\n const focusOption = React.useCallback(\n (type: \"next\" | \"prev\") => {\n let index = focusedOptionIndex;\n\n if (type === \"next\") {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === \"prev\") {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options]\n );\n\n React.useEffect(() => {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n }, [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n ]);\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback(\n (e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n },\n []\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> =\n React.useCallback(\n (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n },\n [isControlledOutside, onChange, options, selectedOptionIndex]\n );\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> =\n React.useCallback(\n (event) => {\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n areOptionsShown() && focusOption(\"prev\");\n break;\n case \"ArrowDown\":\n areOptionsShown() && focusOption(\"next\");\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused]\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> =\n React.useCallback(\n (e) => {\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === \"development\") {\n warn(\n \"Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет \" +\n \"проигнорировано в v5.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.\"\n );\n }\n setOptions(options);\n setSelectedOptionIndex(\n findSelectedIndex(options, nativeSelectValue)\n );\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp]\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== \" \") {\n onKeyboardInput(event.key);\n return;\n }\n\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n if (opened) {\n areOptionsShown() && focusOption(\"prev\");\n } else {\n open();\n }\n break;\n case \"ArrowDown\":\n if (opened) {\n areOptionsShown() && focusOption(\"next\");\n } else {\n open();\n }\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n case \"Spacebar\":\n case \" \":\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n ]\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectFocused();\n }\n },\n [options, selectFocused]\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n ),\n false\n );\n },\n [focusOptionByIndex]\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ]\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles[\"CustomSelect__empty\"]}>\n {emptyText}\n </Footnote>\n );\n\n if (typeof renderDropdown === \"function\") {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n return (\n <label\n className={classNamesString(styles[\"CustomSelect\"], className)}\n style={style}\n ref={multiRef(containerRef, getRootRef)}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n className={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-expect-error: TS2322 MouseEventHandler<HTMLSelectElement> !== MouseEventHandler<HTMLInputElement>\n onClick={props.onClick}\n before={before}\n after={icon}\n placeholder={restProps.placeholder}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n after={icon}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n className={styles[\"CustomSelect__control\"]}\n >\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n observableRefs={scrollBoxRef}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomSelect.js","names":["React","SelectMimicry","debounce","multiRef","getTitleFromChildren","classNamesString","CustomSelectOption","Input","DropdownIcon","Footnote","warnOnce","defaultFilterFn","getFormFieldModeFromSelectType","CustomSelectDropdown","useIsomorphicLayoutEffect","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","CustomSelect","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","onInputChange","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","icon","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","containerRef","useRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","placeholder"],"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { SelectMimicry } from \"../SelectMimicry/SelectMimicry\";\nimport { debounce, multiRef, getTitleFromChildren } from \"../../lib/utils\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { NativeSelectProps } from \"../NativeSelect/NativeSelect\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { FormFieldProps } from \"../FormField/FormField\";\nimport { Input } from \"../Input/Input\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport {\n defaultFilterFn,\n getFormFieldModeFromSelectType,\n} from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { TrackerOptionsProps } from \"../CustomScrollView/useTrackerVisibility\";\nimport { SelectType } from \"../Select/Select\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport styles from \"./CustomSelect.module.css\";\n\nconst findIndexAfter = (\n options: CustomSelectOptionInterface[] = [],\n startIndex = -1\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce(\"CustomSelect\");\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n \"Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.\",\n \"error\"\n );\n }\n};\n\nfunction defaultRenderOptionFn({\n option,\n ...props\n}: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (\n e: React.MouseEvent<HTMLElement>\n) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue\n) {\n return (\n options.findIndex((item) => {\n value = typeof item.value === \"number\" ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: SelectProps[\"options\"],\n inputValue: string,\n filterFn: SelectProps[\"filterFn\"]\n) => {\n return typeof filterFn === \"function\"\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>[\"value\"];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface SelectProps\n extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * > ⚠️ В v6 из возвращаемых типов будет удалён `CustomSelectOptionInterface[]`. Для кастомной фильтрации используйте\n * > `filterFn`.\n */\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[]\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (\n option: Partial<CustomSelectOptionInterface>\n ) => string\n ) => boolean);\n popupDirection?: \"top\" | \"bottom\";\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n icon?: React.ReactNode;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect(props: SelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = \"default\",\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = \"Ничего не найдено\",\n filterFn = defaultFilterFn,\n icon = <DropdownIcon opened={opened} />,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === \"development\") {\n checkOptionsValueType(optionsProp);\n }\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = React.useRef<HTMLSelectElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<\n number | undefined\n >(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(\n props.value !== undefined\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n props.value ?? props.defaultValue\n );\n const [keyboardInput, setKeyboardInput] = React.useState(\"\");\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<\n number | undefined\n >(findSelectedIndex(optionsProp, props.value ?? props.defaultValue));\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue(\n (nativeSelectValue) => props.value ?? nativeSelectValue\n );\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (nativeSelectValue !== undefined) {\n const event = new Event(\"change\", { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined\n ? options[selectedOptionIndex]\n : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n classNamesString(\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes(\"top\")\n ? styles[\"CustomSelect--pop-up\"]\n : styles[\"CustomSelect--pop-down\"])\n ),\n [dropdownOffsetDistance, opened, popperPlacement]\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput(\"\");\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length]\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (\n index === undefined ||\n index < 0 ||\n index > (options.length ?? 0) - 1\n ) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex\n );\n },\n [options, scrollToElement]\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (\n ref &&\n selectedOptionIndex !== undefined &&\n isValidIndex(selectedOptionIndex)\n ) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex]\n );\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label)\n .toLowerCase()\n .includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options]\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue(\"\");\n setOpened(false);\n setFocusedOptionIndex(-1);\n onClose?.();\n }, [onClose, resetKeyboardInput]);\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {\n const item = options[focusedOptionIndex];\n\n setNativeSelectValue(item?.value);\n close();\n }\n }, [close, focusedOptionIndex, isValidIndex, options]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === \"function\") {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event(\"blur\");\n selectElRef.current?.dispatchEvent(event);\n }, [close]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event(\"focus\");\n selectElRef.current?.dispatchEvent(event);\n }, []);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(\n () => debounce(resetKeyboardInput, 1000),\n [resetKeyboardInput]\n );\n\n const focusOption = React.useCallback(\n (type: \"next\" | \"prev\") => {\n let index = focusedOptionIndex;\n\n if (type === \"next\") {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === \"prev\") {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options]\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n ]\n );\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback(\n (e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n },\n []\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (\n e\n ) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> =\n React.useCallback(\n (event) => {\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n areOptionsShown() && focusOption(\"prev\");\n break;\n case \"ArrowDown\":\n areOptionsShown() && focusOption(\"next\");\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused]\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> =\n React.useCallback(\n (e) => {\n // TODO v6 удалить `onInputChangeProp`.\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === \"development\") {\n warn(\n \"Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет \" +\n \"проигнорировано в v6.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.\"\n );\n }\n setOptions(options);\n setSelectedOptionIndex(\n findSelectedIndex(options, nativeSelectValue)\n );\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp]\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== \" \") {\n onKeyboardInput(event.key);\n return;\n }\n\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n if (opened) {\n areOptionsShown() && focusOption(\"prev\");\n } else {\n open();\n }\n break;\n case \"ArrowDown\":\n if (opened) {\n areOptionsShown() && focusOption(\"next\");\n } else {\n open();\n }\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n case \"Spacebar\":\n case \" \":\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n ]\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectFocused();\n }\n },\n [options, selectFocused]\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n ),\n false\n );\n },\n [focusOptionByIndex]\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ]\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles[\"CustomSelect__empty\"]}>\n {emptyText}\n </Footnote>\n );\n\n if (typeof renderDropdown === \"function\") {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n return (\n <label\n className={classNamesString(styles[\"CustomSelect\"], className)}\n style={style}\n ref={multiRef(containerRef, getRootRef)}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n className={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-expect-error: TS2322 MouseEventHandler<HTMLSelectElement> !== MouseEventHandler<HTMLInputElement>\n onClick={props.onClick}\n before={before}\n after={icon}\n placeholder={restProps.placeholder}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n after={icon}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n className={styles[\"CustomSelect__control\"]}\n >\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n observableRefs={scrollBoxRef}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n"],"mappings":"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"}
|
|
@@ -6,7 +6,8 @@ var _excluded = ["size", "name", "options", "getRootRef", "onChange", "value", "
|
|
|
6
6
|
import * as React from "react";
|
|
7
7
|
import { classNamesString } from "../../lib/classNames";
|
|
8
8
|
import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect";
|
|
9
|
-
import {
|
|
9
|
+
import { noop } from "../../lib/utils";
|
|
10
|
+
import { useId } from "../../hooks/useId";
|
|
10
11
|
import { warnOnce } from "../../lib/warnOnce";
|
|
11
12
|
import { SegmentedControlOption } from "./SegmentedControlOption/SegmentedControlOption";
|
|
12
13
|
import { useAdaptivity } from "../../hooks/useAdaptivity";
|
|
@@ -30,6 +31,7 @@ export var SegmentedControl = function SegmentedControl(_ref) {
|
|
|
30
31
|
children = _ref.children,
|
|
31
32
|
className = _ref.className,
|
|
32
33
|
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
34
|
+
var id = useId();
|
|
33
35
|
var _useAdaptivity = useAdaptivity(),
|
|
34
36
|
sizeY = _useAdaptivity.sizeY;
|
|
35
37
|
var initialValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : (_options$ = options[0]) === null || _options$ === void 0 ? void 0 : _options$.value;
|
|
@@ -47,7 +49,6 @@ export var SegmentedControl = function SegmentedControl(_ref) {
|
|
|
47
49
|
valueLocal = _React$useState4[0],
|
|
48
50
|
updateValueLocal = _React$useState4[1];
|
|
49
51
|
var value = valueProp !== null && valueProp !== void 0 ? valueProp : valueLocal;
|
|
50
|
-
var nameRef = React.useRef(name !== null && name !== void 0 ? name : generateRandomId());
|
|
51
52
|
useIsomorphicLayoutEffect(function () {
|
|
52
53
|
var _activeOptionIdx = options.findIndex(function (option) {
|
|
53
54
|
return option.value === value;
|
|
@@ -86,7 +87,7 @@ export var SegmentedControl = function SegmentedControl(_ref) {
|
|
|
86
87
|
key: "".concat(optionProps.value)
|
|
87
88
|
}, optionProps, {
|
|
88
89
|
className: classNamesString("vkuiSegmentedControl__option", optionClassName),
|
|
89
|
-
name:
|
|
90
|
+
name: name !== null && name !== void 0 ? name : id,
|
|
90
91
|
checked: value === optionProps.value,
|
|
91
92
|
onChange: function onChange() {
|
|
92
93
|
return handleOnChange(optionProps.value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl.js","names":["React","classNamesString","useIsomorphicLayoutEffect","
|
|
1
|
+
{"version":3,"file":"SegmentedControl.js","names":["React","classNamesString","useIsomorphicLayoutEffect","noop","useId","warnOnce","SegmentedControlOption","useAdaptivity","getSizeYClassName","warn","SegmentedControl","size","name","options","getRootRef","onChange","valueProp","value","defaultValue","children","className","restProps","id","sizeY","initialValue","process","env","NODE_ENV","undefined","useState","activeOptionIdx","updateActiveOptionIdx","valueLocal","updateValueLocal","_activeOptionIdx","findIndex","option","translateX","handleOnChange","styles","width","length","transform","WebkitTransform","map","label","optionClassName","optionProps"],"sources":["../../../src/components/SegmentedControl/SegmentedControl.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { noop } from \"../../lib/utils\";\nimport { useId } from \"../../hooks/useId\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { SegmentedControlOption } from \"./SegmentedControlOption/SegmentedControlOption\";\nimport { HasRootRef } from \"../../types\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { getSizeYClassName } from \"../../helpers/getSizeYClassName\";\nimport styles from \"./SegmentedControl.module.css\";\n\nexport type SegmentedControlValue = string | number | undefined;\n\nexport interface SegmentedControlOptionInterface\n extends Omit<React.HTMLAttributes<HTMLElement>, \"label\"> {\n label: React.ReactChild;\n value: SegmentedControlValue;\n}\n\nexport interface SegmentedControlProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\">,\n HasRootRef<HTMLDivElement> {\n options: SegmentedControlOptionInterface[];\n size?: \"m\" | \"l\";\n name?: string;\n onChange?: (value: SegmentedControlValue) => void;\n value?: SegmentedControlValue;\n defaultValue?: SegmentedControlValue;\n}\n\nconst warn = warnOnce(\"SegmentedControl\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SegmentedControl\n */\nexport const SegmentedControl = ({\n size = \"l\",\n name,\n options,\n getRootRef,\n onChange = noop,\n value: valueProp,\n defaultValue,\n children,\n className,\n ...restProps\n}: SegmentedControlProps) => {\n const id = useId();\n\n const { sizeY } = useAdaptivity();\n const initialValue = defaultValue ?? options[0]?.value;\n\n if (process.env.NODE_ENV === \"development\") {\n if (valueProp !== undefined && defaultValue !== undefined) {\n warn(\n \"SegmentedControl должен быть либо управляемым, либо неуправляемым\" +\n \"(укажите либо свойство value, либо свойство defaultValue, но не оба).\",\n \"error\"\n );\n }\n }\n\n const [activeOptionIdx, updateActiveOptionIdx] = React.useState<number>(0);\n const [valueLocal, updateValueLocal] =\n React.useState<SegmentedControlValue>(initialValue);\n\n const value = valueProp ?? valueLocal;\n\n useIsomorphicLayoutEffect(() => {\n const _activeOptionIdx = options.findIndex(\n (option) => option.value === value\n );\n\n if (_activeOptionIdx === -1 && process.env.NODE_ENV === \"development\") {\n warn(\"defaultValue: такого значения нет среди опций!\", \"error\");\n }\n\n updateActiveOptionIdx(_activeOptionIdx);\n }, [value, options]);\n\n const translateX = `translateX(${100 * activeOptionIdx}%)`;\n\n const handleOnChange = (value: SegmentedControlValue) => {\n if (valueProp === undefined) {\n updateValueLocal(value);\n }\n onChange(value);\n };\n\n return (\n <div\n {...restProps}\n className={classNamesString(\n styles[\"SegmentedControl\"],\n getSizeYClassName(styles[\"SegmentedControl\"], sizeY),\n styles[`SegmentedControl--size-${size}`],\n className\n )}\n ref={getRootRef}\n >\n <div role=\"radiogroup\" className={styles[\"SegmentedControl__in\"]}>\n {activeOptionIdx > -1 && (\n <div\n aria-hidden=\"true\"\n className={styles[\"SegmentedControl__slider\"]}\n style={{\n width: `${100 / options.length}%`,\n transform: translateX,\n WebkitTransform: translateX,\n }}\n />\n )}\n {options.map(\n ({ label, className: optionClassName, ...optionProps }) => (\n <SegmentedControlOption\n key={`${optionProps.value}`}\n {...optionProps}\n className={classNamesString(\n styles[\"SegmentedControl__option\"],\n optionClassName\n )}\n name={name ?? id}\n checked={value === optionProps.value}\n onChange={() => handleOnChange(optionProps.value)}\n >\n {label}\n </SegmentedControlOption>\n )\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { TouchProps } from "../Touch/Touch";
|
|
3
|
-
import { HasComponent, HasRootRef } from "../../types";
|
|
3
|
+
import { AnchorHTMLAttributesOnly, HasComponent, HasRootRef } from "../../types";
|
|
4
4
|
import { FocusVisibleMode } from "../FocusVisible/FocusVisible";
|
|
5
5
|
declare type StateMode = "opacity" | "background";
|
|
6
|
-
export declare type TappableElementProps = Omit<React.AllHTMLAttributes<HTMLElement>, "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onMouseDown" | "onMouseMove" | "onMouseUp" | "onMouseLeave"
|
|
6
|
+
export declare type TappableElementProps = Omit<React.AllHTMLAttributes<HTMLElement>, "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onMouseDown" | "onMouseMove" | "onMouseUp" | "onMouseLeave"> & AnchorHTMLAttributesOnly;
|
|
7
7
|
export interface TappableProps extends TappableElementProps, HasRootRef<HTMLElement>, HasComponent, Pick<TouchProps, "onStart" | "onEnd" | "onMove"> {
|
|
8
8
|
/**
|
|
9
9
|
* Длительность показа active-состояния
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tappable.js","names":["React","mitt","noop","Touch","TouchRootContext","classNamesString","Platform","getOffsetRect","coordX","coordY","shouldTriggerClickOnEnterOrSpace","useIsomorphicLayoutEffect","FocusVisible","useTimeout","useExternRef","usePlatform","useFocusVisible","callMultiple","useBooleanState","useAdaptivity","useAdaptivityHasHover","useAdaptivityHasPointer","sizeXClassNames","none","compact","regular","WAVE_LIVE","ACTIVE_DELAY","ACTIVE_EFFECT_DELAY","activeBus","TapState","pending","active","exiting","TappableContext","createContext","onHoverChange","isPresetStateMode","stateMode","useActivity","hasActive","stopDelay","id","useMemo","Math","round","random","toString","useState","activity","setActivity","_stop","start","delayStart","activeTimeout","stopTimeout","set","clear","emit","onActiveChange","activeId","on","off","stop","delay","Tappable","children","Component","onClick","_onKeyDown","onKeyDown","activeEffectDelay","stopPropagation","getRootRef","hasHover","_hasHover","hoverMode","_hasActive","activeMode","focusVisibleMode","onEnter","onLeave","className","props","href","useContext","insideTouchRoot","platform","focusVisible","onBlur","onFocus","sizeX","hasPointerContext","hasHoverContext","clicks","setClicks","childHover","setChildHover","_hovered","value","setHoveredTrue","setTrue","setHoveredFalse","setFalse","hovered","disabled","isCustomElement","contentEditable","isPresetHoverMode","isPresetActiveMode","isPresetFocusVisibleMode","includes","containerRef","childContext","useRef","current","e","preventDefault","click","needWaves","ANDROID","clearClicks","addClick","x","y","dateNow","Date","now","filteredClicks","filter","onStart","originalEvent","touches","length","top","left","onMove","isSlide","onEnd","duration","activeDuration","classes","IOS","styles","handlers","role","undefined","map","wave"],"sources":["../../../src/components/Tappable/Tappable.tsx"],"sourcesContent":["import * as React from \"react\";\nimport mitt from \"mitt\";\nimport { noop } from \"../../lib/utils\";\nimport { Touch, TouchEvent, TouchProps } from \"../Touch/Touch\";\nimport TouchRootContext from \"../Touch/TouchContext\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { Platform } from \"../../lib/platform\";\nimport { getOffsetRect } from \"../../lib/offset\";\nimport { coordX, coordY } from \"../../lib/touch\";\nimport { HasComponent, HasRootRef } from \"../../types\";\nimport { shouldTriggerClickOnEnterOrSpace } from \"../../lib/accessibility\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { FocusVisible, FocusVisibleMode } from \"../FocusVisible/FocusVisible\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { useFocusVisible } from \"../../hooks/useFocusVisible\";\nimport { callMultiple } from \"../../lib/callMultiple\";\nimport { useBooleanState } from \"../../hooks/useBooleanState\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { useAdaptivityHasHover } from \"../../hooks/useAdaptivityHasHover\";\nimport { useAdaptivityHasPointer } from \"../../hooks/useAdaptivityHasPointer\";\nimport styles from \"./Tappable.module.css\";\n\nconst sizeXClassNames = {\n none: styles[\"Tappable--sizeX-none\"],\n compact: styles[\"Tappable--sizeX-compact\"],\n regular: styles[\"Tappable--sizeX-regular\"],\n};\n\ntype StateMode = \"opacity\" | \"background\";\n\nconst WAVE_LIVE = 225;\n\nexport type TappableElementProps = Omit<\n React.AllHTMLAttributes<HTMLElement>,\n | \"onTouchStart\"\n | \"onTouchMove\"\n | \"onTouchEnd\"\n | \"onTouchCancel\"\n | \"onMouseDown\"\n | \"onMouseMove\"\n | \"onMouseUp\"\n | \"onMouseLeave\"\n>;\n\nexport interface TappableProps\n extends TappableElementProps,\n HasRootRef<HTMLElement>,\n HasComponent,\n Pick<TouchProps, \"onStart\" | \"onEnd\" | \"onMove\"> {\n /**\n * Длительность показа active-состояния\n */\n activeEffectDelay?: number;\n stopPropagation?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на hover-состояние\n */\n hasHover?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на active-состояние\n */\n hasActive?: boolean;\n /**\n * Стиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active\n */\n activeMode?: StateMode | string;\n /**\n * Стиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover\n */\n hoverMode?: StateMode | string;\n /**\n * Стиль аутлайна focus visible. Если передать произвольную строку, она добавится как css-класс во время focus-visible\n */\n focusVisibleMode?: FocusVisibleMode | string;\n children?: React.ReactNode;\n onEnter?(outputEvent: MouseEvent): void;\n onLeave?(outputEvent: MouseEvent): void;\n}\n\ninterface Wave {\n x: number;\n y: number;\n id: number;\n}\n\nexport interface RootComponentProps extends TouchProps {\n ref?: React.Ref<HTMLElement>;\n}\n\nexport const ACTIVE_DELAY = 70;\nexport const ACTIVE_EFFECT_DELAY = 600;\n\nconst activeBus = mitt<{ active: string }>();\nconst TapState = { none: 0, pending: 1, active: 2, exiting: 3 } as const;\n\ntype TappableContextInterface = { onHoverChange: (s: boolean) => void };\nconst TappableContext = React.createContext<TappableContextInterface>({\n onHoverChange: noop,\n});\n\nfunction isPresetStateMode(\n stateMode: StateMode | string\n): stateMode is StateMode {\n switch (stateMode) {\n case \"opacity\":\n case \"background\":\n return true;\n default:\n return false;\n }\n}\n\nfunction useActivity(hasActive: boolean, stopDelay: number) {\n const id = React.useMemo(\n () => Math.round(Math.random() * 1e8).toString(16),\n []\n );\n\n const [activity, setActivity] = React.useState<\n typeof TapState[keyof typeof TapState]\n >(TapState.none);\n const _stop = () => setActivity(TapState.none);\n const start = () => hasActive && setActivity(TapState.active);\n const delayStart = () => {\n hasActive && setActivity(TapState.pending);\n };\n\n const activeTimeout = useTimeout(start, ACTIVE_DELAY);\n const stopTimeout = useTimeout(_stop, stopDelay);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.pending) {\n activeTimeout.set();\n return activeTimeout.clear;\n }\n if (activity === TapState.exiting) {\n return stopTimeout.clear;\n }\n if (activity === TapState.active) {\n activeBus.emit(\"active\", id);\n }\n return noop;\n }, [activity]);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.none) {\n return noop;\n }\n const onActiveChange = (activeId: string) => {\n activeId !== id && _stop();\n };\n activeBus.on(\"active\", onActiveChange);\n return () => activeBus.off(\"active\", onActiveChange);\n }, [activity === TapState.none]);\n\n useIsomorphicLayoutEffect(() => {\n !hasActive && _stop();\n }, [hasActive]);\n\n const stop = (delay?: number) => {\n if (delay) {\n setActivity(TapState.exiting);\n return stopTimeout.set(delay);\n }\n _stop();\n };\n\n return [activity, { delayStart, start, stop }] as const;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tappable\n */\nexport const Tappable = ({\n children,\n Component,\n onClick,\n onKeyDown: _onKeyDown,\n activeEffectDelay = ACTIVE_EFFECT_DELAY,\n stopPropagation = false,\n getRootRef,\n hasHover: _hasHover = true,\n hoverMode = \"background\",\n hasActive: _hasActive = true,\n activeMode = \"background\",\n focusVisibleMode = \"inside\",\n onEnter,\n onLeave,\n className,\n ...props\n}: TappableProps) => {\n Component = Component || ((props.href ? \"a\" : \"div\") as React.ElementType);\n\n const { onHoverChange } = React.useContext(TappableContext);\n const insideTouchRoot = React.useContext(TouchRootContext);\n const platform = usePlatform();\n const { focusVisible, onBlur, onFocus } = useFocusVisible();\n const { sizeX = \"none\" } = useAdaptivity();\n const hasPointerContext = useAdaptivityHasPointer();\n const hasHoverContext = useAdaptivityHasHover();\n\n const [clicks, setClicks] = React.useState<Wave[]>([]);\n const [childHover, setChildHover] = React.useState(false);\n const {\n value: _hovered,\n setTrue: setHoveredTrue,\n setFalse: setHoveredFalse,\n } = useBooleanState(false);\n\n const hovered = _hovered && !props.disabled;\n const hasActive = _hasActive && !childHover && !props.disabled;\n const hasHover = hasHoverContext === true && _hasHover && !childHover;\n const isCustomElement =\n Component !== \"a\" &&\n Component !== \"button\" &&\n Component !== \"label\" &&\n !props.contentEditable;\n const isPresetHoverMode = isPresetStateMode(hoverMode);\n const isPresetActiveMode = isPresetStateMode(activeMode);\n const isPresetFocusVisibleMode = [\"inside\", \"outside\"].includes(\n focusVisibleMode\n );\n\n const [activity, { start, stop, delayStart }] = useActivity(\n hasActive,\n activeEffectDelay\n );\n const active = activity === TapState.active || activity === TapState.exiting;\n\n const containerRef = useExternRef(getRootRef);\n\n // hover propagation\n const childContext = React.useRef({ onHoverChange: setChildHover }).current;\n useIsomorphicLayoutEffect(() => {\n if (!hovered) {\n return noop;\n }\n onHoverChange(true);\n return () => onHoverChange(false);\n }, [hovered]);\n\n /*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\n function onKeyDown(e: React.KeyboardEvent<HTMLElement>) {\n if (isCustomElement && shouldTriggerClickOnEnterOrSpace(e)) {\n e.preventDefault();\n containerRef.current?.click();\n }\n }\n\n const needWaves =\n platform === Platform.ANDROID &&\n !hasPointerContext &&\n hasActive &&\n activeMode === \"background\";\n\n const clearClicks = useTimeout(() => setClicks([]), WAVE_LIVE);\n\n function addClick(x: number, y: number) {\n const dateNow = Date.now();\n const filteredClicks = clicks.filter(\n (click) => click.id + WAVE_LIVE > dateNow\n );\n\n setClicks([...filteredClicks, { x, y, id: dateNow }]);\n clearClicks.set();\n }\n\n function onStart({ originalEvent }: TouchEvent) {\n if (hasActive) {\n if (originalEvent.touches && originalEvent.touches.length > 1) {\n // r сожалению я так и не понял, что это делает и можно ли упихнуть его в Touch\n return stop();\n }\n\n if (needWaves) {\n const { top, left } = getOffsetRect(containerRef.current);\n const x = coordX(originalEvent) - (left ?? 0);\n const y = coordY(originalEvent) - (top ?? 0);\n addClick(x, y);\n }\n\n delayStart();\n }\n }\n\n function onMove({ isSlide }: TouchEvent) {\n if (isSlide) {\n stop();\n }\n }\n\n function onEnd({ duration }: TouchEvent) {\n if (activity === TapState.none) {\n return;\n }\n if (activity === TapState.pending) {\n // активировать при коротком тапе\n start();\n }\n\n // отключить без задержки при длинном тапе\n const activeDuration = duration - ACTIVE_DELAY;\n stop(activeDuration >= 100 ? 0 : activeEffectDelay - activeDuration);\n }\n\n const classes = classNamesString(\n className,\n styles[\"Tappable\"],\n platform === Platform.IOS && styles[\"Tappable--ios\"],\n sizeXClassNames[sizeX],\n hasHoverContext && styles[\"Tappable--hover-has\"],\n hasActive && styles[\"Tappable--hasActive\"],\n hasHover && hovered && !isPresetHoverMode && hoverMode,\n hasActive && active && !isPresetActiveMode && activeMode,\n focusVisible && !isPresetFocusVisibleMode && focusVisibleMode,\n hasActive && active && styles[\"Tappable--active\"],\n hasHover &&\n hovered &&\n isPresetHoverMode &&\n styles[`Tappable--hover-${hoverMode}`],\n hasActive &&\n active &&\n isPresetActiveMode &&\n styles[`Tappable--active-${activeMode}`],\n focusVisible && styles[\"Tappable--focus-visible\"]\n );\n\n const handlers: RootComponentProps = {\n onStart: callMultiple(onStart, props.onStart),\n onMove: callMultiple(onMove, props.onMove),\n onEnd: callMultiple(onEnd, props.onEnd),\n onClick,\n onKeyDown: callMultiple(onKeyDown, _onKeyDown),\n };\n const role = props.href ? \"link\" : \"button\";\n\n return (\n <Touch\n onEnter={callMultiple(setHoveredTrue, onEnter)}\n onLeave={callMultiple(setHoveredFalse, onLeave)}\n type={Component === \"button\" ? \"button\" : undefined}\n tabIndex={isCustomElement && !props.disabled ? 0 : undefined}\n role={isCustomElement ? role : undefined}\n aria-disabled={isCustomElement ? props.disabled : undefined}\n stopPropagation={stopPropagation && !insideTouchRoot && !props.disabled}\n {...props}\n slideThreshold={20}\n usePointerHover\n className={classes}\n Component={Component}\n getRootRef={containerRef}\n onBlur={callMultiple(onBlur, props.onBlur)}\n onFocus={callMultiple(onFocus, props.onFocus)}\n {...(props.disabled ? {} : handlers)}\n >\n <TappableContext.Provider value={childContext}>\n {children}\n </TappableContext.Provider>\n {needWaves && (\n <span aria-hidden=\"true\" className={styles.Tappable__waves}>\n {clicks.map((wave) => (\n <span\n key={wave.id}\n className={styles.Tappable__wave}\n style={{ top: wave.y, left: wave.x }}\n />\n ))}\n </span>\n )}\n {((hasHover && hoverMode === \"background\") ||\n (hasActive && activeMode === \"background\")) && (\n <span aria-hidden=\"true\" className={styles.Tappable__stateLayer} />\n )}\n {!props.disabled && isPresetFocusVisibleMode && (\n <FocusVisible mode={focusVisibleMode as FocusVisibleMode} />\n )}\n </Touch>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tappable.js","names":["React","mitt","noop","Touch","TouchRootContext","classNamesString","Platform","getOffsetRect","coordX","coordY","shouldTriggerClickOnEnterOrSpace","useIsomorphicLayoutEffect","FocusVisible","useTimeout","useExternRef","usePlatform","useFocusVisible","callMultiple","useBooleanState","useAdaptivity","useAdaptivityHasHover","useAdaptivityHasPointer","sizeXClassNames","none","compact","regular","WAVE_LIVE","ACTIVE_DELAY","ACTIVE_EFFECT_DELAY","activeBus","TapState","pending","active","exiting","TappableContext","createContext","onHoverChange","isPresetStateMode","stateMode","useActivity","hasActive","stopDelay","id","useMemo","Math","round","random","toString","useState","activity","setActivity","_stop","start","delayStart","activeTimeout","stopTimeout","set","clear","emit","onActiveChange","activeId","on","off","stop","delay","Tappable","children","Component","onClick","_onKeyDown","onKeyDown","activeEffectDelay","stopPropagation","getRootRef","hasHover","_hasHover","hoverMode","_hasActive","activeMode","focusVisibleMode","onEnter","onLeave","className","props","href","useContext","insideTouchRoot","platform","focusVisible","onBlur","onFocus","sizeX","hasPointerContext","hasHoverContext","clicks","setClicks","childHover","setChildHover","_hovered","value","setHoveredTrue","setTrue","setHoveredFalse","setFalse","hovered","disabled","isCustomElement","contentEditable","isPresetHoverMode","isPresetActiveMode","isPresetFocusVisibleMode","includes","containerRef","childContext","useRef","current","e","preventDefault","click","needWaves","ANDROID","clearClicks","addClick","x","y","dateNow","Date","now","filteredClicks","filter","onStart","originalEvent","touches","length","top","left","onMove","isSlide","onEnd","duration","activeDuration","classes","IOS","styles","handlers","role","undefined","map","wave"],"sources":["../../../src/components/Tappable/Tappable.tsx"],"sourcesContent":["import * as React from \"react\";\nimport mitt from \"mitt\";\nimport { noop } from \"../../lib/utils\";\nimport { Touch, TouchEvent, TouchProps } from \"../Touch/Touch\";\nimport TouchRootContext from \"../Touch/TouchContext\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { Platform } from \"../../lib/platform\";\nimport { getOffsetRect } from \"../../lib/offset\";\nimport { coordX, coordY } from \"../../lib/touch\";\nimport {\n AnchorHTMLAttributesOnly,\n HasComponent,\n HasRootRef,\n} from \"../../types\";\nimport { shouldTriggerClickOnEnterOrSpace } from \"../../lib/accessibility\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { FocusVisible, FocusVisibleMode } from \"../FocusVisible/FocusVisible\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { useFocusVisible } from \"../../hooks/useFocusVisible\";\nimport { callMultiple } from \"../../lib/callMultiple\";\nimport { useBooleanState } from \"../../hooks/useBooleanState\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { useAdaptivityHasHover } from \"../../hooks/useAdaptivityHasHover\";\nimport { useAdaptivityHasPointer } from \"../../hooks/useAdaptivityHasPointer\";\nimport styles from \"./Tappable.module.css\";\n\nconst sizeXClassNames = {\n none: styles[\"Tappable--sizeX-none\"],\n compact: styles[\"Tappable--sizeX-compact\"],\n regular: styles[\"Tappable--sizeX-regular\"],\n};\n\ntype StateMode = \"opacity\" | \"background\";\n\nconst WAVE_LIVE = 225;\n\nexport type TappableElementProps = Omit<\n React.AllHTMLAttributes<HTMLElement>,\n | \"onTouchStart\"\n | \"onTouchMove\"\n | \"onTouchEnd\"\n | \"onTouchCancel\"\n | \"onMouseDown\"\n | \"onMouseMove\"\n | \"onMouseUp\"\n | \"onMouseLeave\"\n> &\n AnchorHTMLAttributesOnly; // В AllHTMLAttributes не хватает типов для ссылок\n\nexport interface TappableProps\n extends TappableElementProps,\n HasRootRef<HTMLElement>,\n HasComponent,\n Pick<TouchProps, \"onStart\" | \"onEnd\" | \"onMove\"> {\n /**\n * Длительность показа active-состояния\n */\n activeEffectDelay?: number;\n stopPropagation?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на hover-состояние\n */\n hasHover?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на active-состояние\n */\n hasActive?: boolean;\n /**\n * Стиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active\n */\n activeMode?: StateMode | string;\n /**\n * Стиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover\n */\n hoverMode?: StateMode | string;\n /**\n * Стиль аутлайна focus visible. Если передать произвольную строку, она добавится как css-класс во время focus-visible\n */\n focusVisibleMode?: FocusVisibleMode | string;\n children?: React.ReactNode;\n onEnter?(outputEvent: MouseEvent): void;\n onLeave?(outputEvent: MouseEvent): void;\n}\n\ninterface Wave {\n x: number;\n y: number;\n id: number;\n}\n\nexport interface RootComponentProps extends TouchProps {\n ref?: React.Ref<HTMLElement>;\n}\n\nexport const ACTIVE_DELAY = 70;\nexport const ACTIVE_EFFECT_DELAY = 600;\n\nconst activeBus = mitt<{ active: string }>();\nconst TapState = { none: 0, pending: 1, active: 2, exiting: 3 } as const;\n\ntype TappableContextInterface = { onHoverChange: (s: boolean) => void };\nconst TappableContext = React.createContext<TappableContextInterface>({\n onHoverChange: noop,\n});\n\nfunction isPresetStateMode(\n stateMode: StateMode | string\n): stateMode is StateMode {\n switch (stateMode) {\n case \"opacity\":\n case \"background\":\n return true;\n default:\n return false;\n }\n}\n\nfunction useActivity(hasActive: boolean, stopDelay: number) {\n const id = React.useMemo(\n () => Math.round(Math.random() * 1e8).toString(16),\n []\n );\n\n const [activity, setActivity] = React.useState<\n typeof TapState[keyof typeof TapState]\n >(TapState.none);\n const _stop = () => setActivity(TapState.none);\n const start = () => hasActive && setActivity(TapState.active);\n const delayStart = () => {\n hasActive && setActivity(TapState.pending);\n };\n\n const activeTimeout = useTimeout(start, ACTIVE_DELAY);\n const stopTimeout = useTimeout(_stop, stopDelay);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.pending) {\n activeTimeout.set();\n return activeTimeout.clear;\n }\n if (activity === TapState.exiting) {\n return stopTimeout.clear;\n }\n if (activity === TapState.active) {\n activeBus.emit(\"active\", id);\n }\n return noop;\n }, [activity]);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.none) {\n return noop;\n }\n const onActiveChange = (activeId: string) => {\n activeId !== id && _stop();\n };\n activeBus.on(\"active\", onActiveChange);\n return () => activeBus.off(\"active\", onActiveChange);\n }, [activity === TapState.none]);\n\n useIsomorphicLayoutEffect(() => {\n !hasActive && _stop();\n }, [hasActive]);\n\n const stop = (delay?: number) => {\n if (delay) {\n setActivity(TapState.exiting);\n return stopTimeout.set(delay);\n }\n _stop();\n };\n\n return [activity, { delayStart, start, stop }] as const;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tappable\n */\nexport const Tappable = ({\n children,\n Component,\n onClick,\n onKeyDown: _onKeyDown,\n activeEffectDelay = ACTIVE_EFFECT_DELAY,\n stopPropagation = false,\n getRootRef,\n hasHover: _hasHover = true,\n hoverMode = \"background\",\n hasActive: _hasActive = true,\n activeMode = \"background\",\n focusVisibleMode = \"inside\",\n onEnter,\n onLeave,\n className,\n ...props\n}: TappableProps) => {\n Component = Component || ((props.href ? \"a\" : \"div\") as React.ElementType);\n\n const { onHoverChange } = React.useContext(TappableContext);\n const insideTouchRoot = React.useContext(TouchRootContext);\n const platform = usePlatform();\n const { focusVisible, onBlur, onFocus } = useFocusVisible();\n const { sizeX = \"none\" } = useAdaptivity();\n const hasPointerContext = useAdaptivityHasPointer();\n const hasHoverContext = useAdaptivityHasHover();\n\n const [clicks, setClicks] = React.useState<Wave[]>([]);\n const [childHover, setChildHover] = React.useState(false);\n const {\n value: _hovered,\n setTrue: setHoveredTrue,\n setFalse: setHoveredFalse,\n } = useBooleanState(false);\n\n const hovered = _hovered && !props.disabled;\n const hasActive = _hasActive && !childHover && !props.disabled;\n const hasHover = hasHoverContext === true && _hasHover && !childHover;\n const isCustomElement =\n Component !== \"a\" &&\n Component !== \"button\" &&\n Component !== \"label\" &&\n !props.contentEditable;\n const isPresetHoverMode = isPresetStateMode(hoverMode);\n const isPresetActiveMode = isPresetStateMode(activeMode);\n const isPresetFocusVisibleMode = [\"inside\", \"outside\"].includes(\n focusVisibleMode\n );\n\n const [activity, { start, stop, delayStart }] = useActivity(\n hasActive,\n activeEffectDelay\n );\n const active = activity === TapState.active || activity === TapState.exiting;\n\n const containerRef = useExternRef(getRootRef);\n\n // hover propagation\n const childContext = React.useRef({ onHoverChange: setChildHover }).current;\n useIsomorphicLayoutEffect(() => {\n if (!hovered) {\n return noop;\n }\n onHoverChange(true);\n return () => onHoverChange(false);\n }, [hovered]);\n\n /*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\n function onKeyDown(e: React.KeyboardEvent<HTMLElement>) {\n if (isCustomElement && shouldTriggerClickOnEnterOrSpace(e)) {\n e.preventDefault();\n containerRef.current?.click();\n }\n }\n\n const needWaves =\n platform === Platform.ANDROID &&\n !hasPointerContext &&\n hasActive &&\n activeMode === \"background\";\n\n const clearClicks = useTimeout(() => setClicks([]), WAVE_LIVE);\n\n function addClick(x: number, y: number) {\n const dateNow = Date.now();\n const filteredClicks = clicks.filter(\n (click) => click.id + WAVE_LIVE > dateNow\n );\n\n setClicks([...filteredClicks, { x, y, id: dateNow }]);\n clearClicks.set();\n }\n\n function onStart({ originalEvent }: TouchEvent) {\n if (hasActive) {\n if (originalEvent.touches && originalEvent.touches.length > 1) {\n // r сожалению я так и не понял, что это делает и можно ли упихнуть его в Touch\n return stop();\n }\n\n if (needWaves) {\n const { top, left } = getOffsetRect(containerRef.current);\n const x = coordX(originalEvent) - (left ?? 0);\n const y = coordY(originalEvent) - (top ?? 0);\n addClick(x, y);\n }\n\n delayStart();\n }\n }\n\n function onMove({ isSlide }: TouchEvent) {\n if (isSlide) {\n stop();\n }\n }\n\n function onEnd({ duration }: TouchEvent) {\n if (activity === TapState.none) {\n return;\n }\n if (activity === TapState.pending) {\n // активировать при коротком тапе\n start();\n }\n\n // отключить без задержки при длинном тапе\n const activeDuration = duration - ACTIVE_DELAY;\n stop(activeDuration >= 100 ? 0 : activeEffectDelay - activeDuration);\n }\n\n const classes = classNamesString(\n className,\n styles[\"Tappable\"],\n platform === Platform.IOS && styles[\"Tappable--ios\"],\n sizeXClassNames[sizeX],\n hasHoverContext && styles[\"Tappable--hover-has\"],\n hasActive && styles[\"Tappable--hasActive\"],\n hasHover && hovered && !isPresetHoverMode && hoverMode,\n hasActive && active && !isPresetActiveMode && activeMode,\n focusVisible && !isPresetFocusVisibleMode && focusVisibleMode,\n hasActive && active && styles[\"Tappable--active\"],\n hasHover &&\n hovered &&\n isPresetHoverMode &&\n styles[`Tappable--hover-${hoverMode}`],\n hasActive &&\n active &&\n isPresetActiveMode &&\n styles[`Tappable--active-${activeMode}`],\n focusVisible && styles[\"Tappable--focus-visible\"]\n );\n\n const handlers: RootComponentProps = {\n onStart: callMultiple(onStart, props.onStart),\n onMove: callMultiple(onMove, props.onMove),\n onEnd: callMultiple(onEnd, props.onEnd),\n onClick,\n onKeyDown: callMultiple(onKeyDown, _onKeyDown),\n };\n const role = props.href ? \"link\" : \"button\";\n\n return (\n <Touch\n onEnter={callMultiple(setHoveredTrue, onEnter)}\n onLeave={callMultiple(setHoveredFalse, onLeave)}\n type={Component === \"button\" ? \"button\" : undefined}\n tabIndex={isCustomElement && !props.disabled ? 0 : undefined}\n role={isCustomElement ? role : undefined}\n aria-disabled={isCustomElement ? props.disabled : undefined}\n stopPropagation={stopPropagation && !insideTouchRoot && !props.disabled}\n {...props}\n slideThreshold={20}\n usePointerHover\n className={classes}\n Component={Component}\n getRootRef={containerRef}\n onBlur={callMultiple(onBlur, props.onBlur)}\n onFocus={callMultiple(onFocus, props.onFocus)}\n {...(props.disabled ? {} : handlers)}\n >\n <TappableContext.Provider value={childContext}>\n {children}\n </TappableContext.Provider>\n {needWaves && (\n <span aria-hidden=\"true\" className={styles.Tappable__waves}>\n {clicks.map((wave) => (\n <span\n key={wave.id}\n className={styles.Tappable__wave}\n style={{ top: wave.y, left: wave.x }}\n />\n ))}\n </span>\n )}\n {((hasHover && hoverMode === \"background\") ||\n (hasActive && activeMode === \"background\")) && (\n <span aria-hidden=\"true\" className={styles.Tappable__stateLayer} />\n )}\n {!props.disabled && isPresetFocusVisibleMode && (\n <FocusVisible mode={focusVisibleMode as FocusVisibleMode} />\n )}\n </Touch>\n );\n};\n"],"mappings":";;;;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,IAAI,MAAM,MAAM;AACvB,SAASC,IAAI,QAAQ,iBAAiB;AACtC,SAASC,KAAK,QAAgC,gBAAgB;AAC9D,OAAOC,gBAAgB,MAAM,uBAAuB;AACpD,SAASC,gBAAgB,QAAQ,sBAAsB;AACvD,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,MAAM,EAAEC,MAAM,QAAQ,iBAAiB;AAMhD,SAASC,gCAAgC,QAAQ,yBAAyB;AAC1E,SAASC,yBAAyB,QAAQ,qCAAqC;AAC/E,SAASC,YAAY,QAA0B,8BAA8B;AAC7E,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SAASC,YAAY,QAAQ,0BAA0B;AACvD,SAASC,WAAW,QAAQ,yBAAyB;AACrD,SAASC,eAAe,QAAQ,6BAA6B;AAC7D,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,eAAe,QAAQ,6BAA6B;AAC7D,SAASC,aAAa,QAAQ,2BAA2B;AACzD,SAASC,qBAAqB,QAAQ,mCAAmC;AACzE,SAASC,uBAAuB,QAAQ,qCAAqC;AAG7E,IAAMC,eAAe,GAAG;EACtBC,IAAI,4BAAgC;EACpCC,OAAO,+BAAmC;EAC1CC,OAAO;AACT,CAAC;AAID,IAAMC,SAAS,GAAG,GAAG;AA4DrB,OAAO,IAAMC,YAAY,GAAG,EAAE;AAC9B,OAAO,IAAMC,mBAAmB,GAAG,GAAG;AAEtC,IAAMC,SAAS,GAAG5B,IAAI,EAAsB;AAC5C,IAAM6B,QAAQ,GAAG;EAAEP,IAAI,EAAE,CAAC;EAAEQ,OAAO,EAAE,CAAC;EAAEC,MAAM,EAAE,CAAC;EAAEC,OAAO,EAAE;AAAE,CAAU;AAGxE,IAAMC,eAAe,gBAAGlC,KAAK,CAACmC,aAAa,CAA2B;EACpEC,aAAa,EAAElC;AACjB,CAAC,CAAC;AAEF,SAASmC,iBAAiB,CACxBC,SAA6B,EACL;EACxB,QAAQA,SAAS;IACf,KAAK,SAAS;IACd,KAAK,YAAY;MACf,OAAO,IAAI;IACb;MACE,OAAO,KAAK;EAAC;AAEnB;AAEA,SAASC,WAAW,CAACC,SAAkB,EAAEC,SAAiB,EAAE;EAC1D,IAAMC,EAAE,GAAG1C,KAAK,CAAC2C,OAAO,CACtB;IAAA,OAAMC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,EAAE,GAAG,GAAG,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC;EAAA,GAClD,EAAE,CACH;EAED,sBAAgC/C,KAAK,CAACgD,QAAQ,CAE5ClB,QAAQ,CAACP,IAAI,CAAC;IAAA;IAFT0B,QAAQ;IAAEC,WAAW;EAG5B,IAAMC,KAAK,GAAG,SAARA,KAAK;IAAA,OAASD,WAAW,CAACpB,QAAQ,CAACP,IAAI,CAAC;EAAA;EAC9C,IAAM6B,KAAK,GAAG,SAARA,KAAK;IAAA,OAASZ,SAAS,IAAIU,WAAW,CAACpB,QAAQ,CAACE,MAAM,CAAC;EAAA;EAC7D,IAAMqB,UAAU,GAAG,SAAbA,UAAU,GAAS;IACvBb,SAAS,IAAIU,WAAW,CAACpB,QAAQ,CAACC,OAAO,CAAC;EAC5C,CAAC;EAED,IAAMuB,aAAa,GAAGzC,UAAU,CAACuC,KAAK,EAAEzB,YAAY,CAAC;EACrD,IAAM4B,WAAW,GAAG1C,UAAU,CAACsC,KAAK,EAAEV,SAAS,CAAC;EAEhD9B,yBAAyB,CAAC,YAAM;IAC9B,IAAIsC,QAAQ,KAAKnB,QAAQ,CAACC,OAAO,EAAE;MACjCuB,aAAa,CAACE,GAAG,EAAE;MACnB,OAAOF,aAAa,CAACG,KAAK;IAC5B;IACA,IAAIR,QAAQ,KAAKnB,QAAQ,CAACG,OAAO,EAAE;MACjC,OAAOsB,WAAW,CAACE,KAAK;IAC1B;IACA,IAAIR,QAAQ,KAAKnB,QAAQ,CAACE,MAAM,EAAE;MAChCH,SAAS,CAAC6B,IAAI,CAAC,QAAQ,EAAEhB,EAAE,CAAC;IAC9B;IACA,OAAOxC,IAAI;EACb,CAAC,EAAE,CAAC+C,QAAQ,CAAC,CAAC;EAEdtC,yBAAyB,CAAC,YAAM;IAC9B,IAAIsC,QAAQ,KAAKnB,QAAQ,CAACP,IAAI,EAAE;MAC9B,OAAOrB,IAAI;IACb;IACA,IAAMyD,cAAc,GAAG,SAAjBA,cAAc,CAAIC,QAAgB,EAAK;MAC3CA,QAAQ,KAAKlB,EAAE,IAAIS,KAAK,EAAE;IAC5B,CAAC;IACDtB,SAAS,CAACgC,EAAE,CAAC,QAAQ,EAAEF,cAAc,CAAC;IACtC,OAAO;MAAA,OAAM9B,SAAS,CAACiC,GAAG,CAAC,QAAQ,EAAEH,cAAc,CAAC;IAAA;EACtD,CAAC,EAAE,CAACV,QAAQ,KAAKnB,QAAQ,CAACP,IAAI,CAAC,CAAC;EAEhCZ,yBAAyB,CAAC,YAAM;IAC9B,CAAC6B,SAAS,IAAIW,KAAK,EAAE;EACvB,CAAC,EAAE,CAACX,SAAS,CAAC,CAAC;EAEf,IAAMuB,IAAI,GAAG,SAAPA,IAAI,CAAIC,KAAc,EAAK;IAC/B,IAAIA,KAAK,EAAE;MACTd,WAAW,CAACpB,QAAQ,CAACG,OAAO,CAAC;MAC7B,OAAOsB,WAAW,CAACC,GAAG,CAACQ,KAAK,CAAC;IAC/B;IACAb,KAAK,EAAE;EACT,CAAC;EAED,OAAO,CAACF,QAAQ,EAAE;IAAEI,UAAU,EAAVA,UAAU;IAAED,KAAK,EAALA,KAAK;IAAEW,IAAI,EAAJA;EAAK,CAAC,CAAC;AAChD;;AAEA;AACA;AACA;AACA,OAAO,IAAME,QAAQ,GAAG,SAAXA,QAAQ,OAiBA;EAAA,IAhBnBC,QAAQ,QAARA,QAAQ;IACRC,SAAS,QAATA,SAAS;IACTC,OAAO,QAAPA,OAAO;IACIC,UAAU,QAArBC,SAAS;IAAA,6BACTC,iBAAiB;IAAjBA,iBAAiB,sCAAG3C,mBAAmB;IAAA,4BACvC4C,eAAe;IAAfA,eAAe,qCAAG,KAAK;IACvBC,UAAU,QAAVA,UAAU;IAAA,qBACVC,QAAQ;IAAEC,SAAS,8BAAG,IAAI;IAAA,sBAC1BC,SAAS;IAATA,SAAS,+BAAG,YAAY;IAAA,sBACxBpC,SAAS;IAAEqC,UAAU,+BAAG,IAAI;IAAA,uBAC5BC,UAAU;IAAVA,UAAU,gCAAG,YAAY;IAAA,6BACzBC,gBAAgB;IAAhBA,gBAAgB,sCAAG,QAAQ;IAC3BC,OAAO,QAAPA,OAAO;IACPC,OAAO,QAAPA,OAAO;IACPC,SAAS,QAATA,SAAS;IACNC,KAAK;EAERhB,SAAS,GAAGA,SAAS,KAAMgB,KAAK,CAACC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAuB;EAE1E,wBAA0BpF,KAAK,CAACqF,UAAU,CAACnD,eAAe,CAAC;IAAnDE,aAAa,qBAAbA,aAAa;EACrB,IAAMkD,eAAe,GAAGtF,KAAK,CAACqF,UAAU,CAACjF,gBAAgB,CAAC;EAC1D,IAAMmF,QAAQ,GAAGxE,WAAW,EAAE;EAC9B,uBAA0CC,eAAe,EAAE;IAAnDwE,YAAY,oBAAZA,YAAY;IAAEC,MAAM,oBAANA,MAAM;IAAEC,OAAO,oBAAPA,OAAO;EACrC,qBAA2BvE,aAAa,EAAE;IAAA,sCAAlCwE,KAAK;IAALA,KAAK,qCAAG,MAAM;EACtB,IAAMC,iBAAiB,GAAGvE,uBAAuB,EAAE;EACnD,IAAMwE,eAAe,GAAGzE,qBAAqB,EAAE;EAE/C,uBAA4BpB,KAAK,CAACgD,QAAQ,CAAS,EAAE,CAAC;IAAA;IAA/C8C,MAAM;IAAEC,SAAS;EACxB,uBAAoC/F,KAAK,CAACgD,QAAQ,CAAC,KAAK,CAAC;IAAA;IAAlDgD,UAAU;IAAEC,aAAa;EAChC,uBAII/E,eAAe,CAAC,KAAK,CAAC;IAHjBgF,QAAQ,oBAAfC,KAAK;IACIC,cAAc,oBAAvBC,OAAO;IACGC,eAAe,oBAAzBC,QAAQ;EAGV,IAAMC,OAAO,GAAGN,QAAQ,IAAI,CAACf,KAAK,CAACsB,QAAQ;EAC3C,IAAMjE,SAAS,GAAGqC,UAAU,IAAI,CAACmB,UAAU,IAAI,CAACb,KAAK,CAACsB,QAAQ;EAC9D,IAAM/B,QAAQ,GAAGmB,eAAe,KAAK,IAAI,IAAIlB,SAAS,IAAI,CAACqB,UAAU;EACrE,IAAMU,eAAe,GACnBvC,SAAS,KAAK,GAAG,IACjBA,SAAS,KAAK,QAAQ,IACtBA,SAAS,KAAK,OAAO,IACrB,CAACgB,KAAK,CAACwB,eAAe;EACxB,IAAMC,iBAAiB,GAAGvE,iBAAiB,CAACuC,SAAS,CAAC;EACtD,IAAMiC,kBAAkB,GAAGxE,iBAAiB,CAACyC,UAAU,CAAC;EACxD,IAAMgC,wBAAwB,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAACC,QAAQ,CAC7DhC,gBAAgB,CACjB;EAED,mBAAgDxC,WAAW,CACzDC,SAAS,EACT+B,iBAAiB,CAClB;IAAA;IAHMtB,QAAQ;IAAA;IAAIG,KAAK,kBAALA,KAAK;IAAEW,IAAI,kBAAJA,IAAI;IAAEV,UAAU,kBAAVA,UAAU;EAI1C,IAAMrB,MAAM,GAAGiB,QAAQ,KAAKnB,QAAQ,CAACE,MAAM,IAAIiB,QAAQ,KAAKnB,QAAQ,CAACG,OAAO;EAE5E,IAAM+E,YAAY,GAAGlG,YAAY,CAAC2D,UAAU,CAAC;;EAE7C;EACA,IAAMwC,YAAY,GAAGjH,KAAK,CAACkH,MAAM,CAAC;IAAE9E,aAAa,EAAE6D;EAAc,CAAC,CAAC,CAACkB,OAAO;EAC3ExG,yBAAyB,CAAC,YAAM;IAC9B,IAAI,CAAC6F,OAAO,EAAE;MACZ,OAAOtG,IAAI;IACb;IACAkC,aAAa,CAAC,IAAI,CAAC;IACnB,OAAO;MAAA,OAAMA,aAAa,CAAC,KAAK,CAAC;IAAA;EACnC,CAAC,EAAE,CAACoE,OAAO,CAAC,CAAC;;EAEb;AACF;AACA;AACA;AACA;AACA;AACA;EACE,SAASlC,SAAS,CAAC8C,CAAmC,EAAE;IACtD,IAAIV,eAAe,IAAIhG,gCAAgC,CAAC0G,CAAC,CAAC,EAAE;MAAA;MAC1DA,CAAC,CAACC,cAAc,EAAE;MAClB,yBAAAL,YAAY,CAACG,OAAO,0DAApB,sBAAsBG,KAAK,EAAE;IAC/B;EACF;EAEA,IAAMC,SAAS,GACbhC,QAAQ,KAAKjF,QAAQ,CAACkH,OAAO,IAC7B,CAAC5B,iBAAiB,IAClBpD,SAAS,IACTsC,UAAU,KAAK,YAAY;EAE7B,IAAM2C,WAAW,GAAG5G,UAAU,CAAC;IAAA,OAAMkF,SAAS,CAAC,EAAE,CAAC;EAAA,GAAErE,SAAS,CAAC;EAE9D,SAASgG,QAAQ,CAACC,CAAS,EAAEC,CAAS,EAAE;IACtC,IAAMC,OAAO,GAAGC,IAAI,CAACC,GAAG,EAAE;IAC1B,IAAMC,cAAc,GAAGlC,MAAM,CAACmC,MAAM,CAClC,UAACX,KAAK;MAAA,OAAKA,KAAK,CAAC5E,EAAE,GAAGhB,SAAS,GAAGmG,OAAO;IAAA,EAC1C;IAED9B,SAAS,8BAAKiC,cAAc,IAAE;MAAEL,CAAC,EAADA,CAAC;MAAEC,CAAC,EAADA,CAAC;MAAElF,EAAE,EAAEmF;IAAQ,CAAC,GAAE;IACrDJ,WAAW,CAACjE,GAAG,EAAE;EACnB;EAEA,SAAS0E,OAAO,QAAgC;IAAA,IAA7BC,aAAa,SAAbA,aAAa;IAC9B,IAAI3F,SAAS,EAAE;MACb,IAAI2F,aAAa,CAACC,OAAO,IAAID,aAAa,CAACC,OAAO,CAACC,MAAM,GAAG,CAAC,EAAE;QAC7D;QACA,OAAOtE,IAAI,EAAE;MACf;MAEA,IAAIwD,SAAS,EAAE;QACb,qBAAsBhH,aAAa,CAACyG,YAAY,CAACG,OAAO,CAAC;UAAjDmB,GAAG,kBAAHA,GAAG;UAAEC,IAAI,kBAAJA,IAAI;QACjB,IAAMZ,CAAC,GAAGnH,MAAM,CAAC2H,aAAa,CAAC,IAAII,IAAI,aAAJA,IAAI,cAAJA,IAAI,GAAI,CAAC,CAAC;QAC7C,IAAMX,CAAC,GAAGnH,MAAM,CAAC0H,aAAa,CAAC,IAAIG,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAI,CAAC,CAAC;QAC5CZ,QAAQ,CAACC,CAAC,EAAEC,CAAC,CAAC;MAChB;MAEAvE,UAAU,EAAE;IACd;EACF;EAEA,SAASmF,MAAM,QAA0B;IAAA,IAAvBC,OAAO,SAAPA,OAAO;IACvB,IAAIA,OAAO,EAAE;MACX1E,IAAI,EAAE;IACR;EACF;EAEA,SAAS2E,KAAK,QAA2B;IAAA,IAAxBC,QAAQ,SAARA,QAAQ;IACvB,IAAI1F,QAAQ,KAAKnB,QAAQ,CAACP,IAAI,EAAE;MAC9B;IACF;IACA,IAAI0B,QAAQ,KAAKnB,QAAQ,CAACC,OAAO,EAAE;MACjC;MACAqB,KAAK,EAAE;IACT;;IAEA;IACA,IAAMwF,cAAc,GAAGD,QAAQ,GAAGhH,YAAY;IAC9CoC,IAAI,CAAC6E,cAAc,IAAI,GAAG,GAAG,CAAC,GAAGrE,iBAAiB,GAAGqE,cAAc,CAAC;EACtE;EAEA,IAAMC,OAAO,GAAGxI,gBAAgB,CAC9B6E,SAAS,kBAETK,QAAQ,KAAKjF,QAAQ,CAACwI,GAAG,uBAA2B,EACpDxH,eAAe,CAACqE,KAAK,CAAC,EACtBE,eAAe,6BAAiC,EAChDrD,SAAS,6BAAiC,EAC1CkC,QAAQ,IAAI8B,OAAO,IAAI,CAACI,iBAAiB,IAAIhC,SAAS,EACtDpC,SAAS,IAAIR,MAAM,IAAI,CAAC6E,kBAAkB,IAAI/B,UAAU,EACxDU,YAAY,IAAI,CAACsB,wBAAwB,IAAI/B,gBAAgB,EAC7DvC,SAAS,IAAIR,MAAM,0BAA8B,EACjD0C,QAAQ,IACN8B,OAAO,IACPI,iBAAiB,IACjBmC,MAAM,2BAAoBnE,SAAS,EAAG,EACxCpC,SAAS,IACPR,MAAM,IACN6E,kBAAkB,IAClBkC,MAAM,4BAAqBjE,UAAU,EAAG,EAC1CU,YAAY,iCAAqC,CAClD;EAED,IAAMwD,QAA4B,GAAG;IACnCd,OAAO,EAAEjH,YAAY,CAACiH,OAAO,EAAE/C,KAAK,CAAC+C,OAAO,CAAC;IAC7CM,MAAM,EAAEvH,YAAY,CAACuH,MAAM,EAAErD,KAAK,CAACqD,MAAM,CAAC;IAC1CE,KAAK,EAAEzH,YAAY,CAACyH,KAAK,EAAEvD,KAAK,CAACuD,KAAK,CAAC;IACvCtE,OAAO,EAAPA,OAAO;IACPE,SAAS,EAAErD,YAAY,CAACqD,SAAS,EAAED,UAAU;EAC/C,CAAC;EACD,IAAM4E,IAAI,GAAG9D,KAAK,CAACC,IAAI,GAAG,MAAM,GAAG,QAAQ;EAE3C,oBACE,oBAAC,KAAK;IACJ,OAAO,EAAEnE,YAAY,CAACmF,cAAc,EAAEpB,OAAO,CAAE;IAC/C,OAAO,EAAE/D,YAAY,CAACqF,eAAe,EAAErB,OAAO,CAAE;IAChD,IAAI,EAAEd,SAAS,KAAK,QAAQ,GAAG,QAAQ,GAAG+E,SAAU;IACpD,QAAQ,EAAExC,eAAe,IAAI,CAACvB,KAAK,CAACsB,QAAQ,GAAG,CAAC,GAAGyC,SAAU;IAC7D,IAAI,EAAExC,eAAe,GAAGuC,IAAI,GAAGC,SAAU;IACzC,iBAAexC,eAAe,GAAGvB,KAAK,CAACsB,QAAQ,GAAGyC,SAAU;IAC5D,eAAe,EAAE1E,eAAe,IAAI,CAACc,eAAe,IAAI,CAACH,KAAK,CAACsB;EAAS,GACpEtB,KAAK;IACT,cAAc,EAAE,EAAG;IACnB,eAAe;IACf,SAAS,EAAE0D,OAAQ;IACnB,SAAS,EAAE1E,SAAU;IACrB,UAAU,EAAE6C,YAAa;IACzB,MAAM,EAAE/F,YAAY,CAACwE,MAAM,EAAEN,KAAK,CAACM,MAAM,CAAE;IAC3C,OAAO,EAAExE,YAAY,CAACyE,OAAO,EAAEP,KAAK,CAACO,OAAO;EAAE,GACzCP,KAAK,CAACsB,QAAQ,GAAG,CAAC,CAAC,GAAGuC,QAAQ,gBAEnC,oBAAC,eAAe,CAAC,QAAQ;IAAC,KAAK,EAAE/B;EAAa,GAC3C/C,QAAQ,CACgB,EAC1BqD,SAAS,iBACR;IAAM,eAAY,MAAM;IAAC,SAAS;EAAyB,GACxDzB,MAAM,CAACqD,GAAG,CAAC,UAACC,IAAI;IAAA,oBACf;MACE,GAAG,EAAEA,IAAI,CAAC1G,EAAG;MACb,SAAS,sBAAwB;MACjC,KAAK,EAAE;QAAE4F,GAAG,EAAEc,IAAI,CAACxB,CAAC;QAAEW,IAAI,EAAEa,IAAI,CAACzB;MAAE;IAAE,EACrC;EAAA,CACH,CAAC,CAEL,EACA,CAAEjD,QAAQ,IAAIE,SAAS,KAAK,YAAY,IACtCpC,SAAS,IAAIsC,UAAU,KAAK,YAAa,kBAC1C;IAAM,eAAY,MAAM;IAAC,SAAS;EAA8B,EACjE,EACA,CAACK,KAAK,CAACsB,QAAQ,IAAIK,wBAAwB,iBAC1C,oBAAC,YAAY;IAAC,IAAI,EAAE/B;EAAqC,EAC1D,CACK;AAEZ,CAAC;AAAC;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA"}
|