@vkontakte/vkui 7.6.2 → 7.6.4
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/components/CarouselBase/CarouselBase.d.ts.map +1 -1
- package/dist/components/CarouselBase/CarouselBase.js +6 -1
- package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/components/CarouselBase/hooks.d.ts +1 -0
- package/dist/components/CarouselBase/hooks.d.ts.map +1 -1
- package/dist/components/CarouselBase/hooks.js +4 -0
- package/dist/components/CarouselBase/hooks.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js +4 -2
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/Touch/Touch.d.ts.map +1 -1
- package/dist/components/Touch/Touch.js +12 -5
- package/dist/components/Touch/Touch.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/CarouselBase/CarouselBase.js +6 -1
- package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/cssm/components/CarouselBase/hooks.js +4 -0
- package/dist/cssm/components/CarouselBase/hooks.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js +4 -2
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/Slider/SliderThumb/SliderThumb.module.css +2 -2
- package/dist/cssm/components/Touch/Touch.js +12 -5
- package/dist/cssm/components/Touch/Touch.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +1 -1
- package/src/components/CarouselBase/CarouselBase.tsx +9 -1
- package/src/components/CarouselBase/hooks.ts +6 -0
- package/src/components/CustomSelect/CustomSelect.tsx +4 -2
- package/src/components/Slider/SliderThumb/SliderThumb.module.css +1 -1
- package/src/components/Touch/Touch.tsx +14 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CarouselBase.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/CarouselBase.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkC/B,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,SAAS,CAAC;AAKjB,eAAO,MAAM,YAAY,GAAI,6TA0B1B,gBAAgB,KAAG,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"CarouselBase.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/CarouselBase.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkC/B,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,SAAS,CAAC;AAKjB,eAAO,MAAM,YAAY,GAAI,6TA0B1B,gBAAgB,KAAG,KAAK,CAAC,SA0f3B,CAAC"}
|
|
@@ -59,7 +59,7 @@ export const CarouselBase = (_param)=>{
|
|
|
59
59
|
const shiftXCurrentRef = React.useRef(0);
|
|
60
60
|
const shiftXDeltaRef = React.useRef(0);
|
|
61
61
|
const initialized = React.useRef(false);
|
|
62
|
-
const { addToAnimationQueue, getAnimateFunction, startAnimation } = useSlideAnimation();
|
|
62
|
+
const { animationInQueue, addToAnimationQueue, getAnimateFunction, startAnimation } = useSlideAnimation();
|
|
63
63
|
const isDragging = React.useRef(false);
|
|
64
64
|
const [controlElementsState, setControlElementsState] = React.useState(CONTROL_ELEMENTS_STATE);
|
|
65
65
|
const hasPointer = useAdaptivityHasPointer();
|
|
@@ -133,6 +133,7 @@ export const CarouselBase = (_param)=>{
|
|
|
133
133
|
shiftXCurrentRef.current = Math.abs(shiftXDeltaRef.current) + snaps[0];
|
|
134
134
|
}
|
|
135
135
|
transformCssStyles(shiftX, animation);
|
|
136
|
+
animationFrameRef.current = null;
|
|
136
137
|
});
|
|
137
138
|
};
|
|
138
139
|
const initializeSlides = ()=>{
|
|
@@ -221,6 +222,10 @@ export const CarouselBase = (_param)=>{
|
|
|
221
222
|
if (looped && !onlyOneSlide && !isFullyVisible) {
|
|
222
223
|
slidesManager.current.loopPoints = getLoopPoints(slidesManager.current, containerWidth, isRtl);
|
|
223
224
|
}
|
|
225
|
+
const isAnimationInProgress = animationInQueue() || animationFrameRef.current !== null;
|
|
226
|
+
if (isAnimationInProgress) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
224
229
|
shiftXCurrentRef.current = snaps[slideIndex];
|
|
225
230
|
initialized.current = true;
|
|
226
231
|
setControlElementsState({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CarouselBase/CarouselBase.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useMutationObserver } from '../../hooks/useMutationObserver';\nimport { useResizeObserver } from '../../hooks/useResizeObserver';\nimport { useDOM } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { type CustomTouchEvent } from '../Touch/Touch';\nimport { Bullets } from './Bullets';\nimport { CarouselViewPort } from './CarouselViewPort';\nimport { ScrollArrows } from './ScrollArrows';\nimport {\n ANIMATION_DURATION,\n CONTROL_ELEMENTS_STATE,\n SLIDE_THRESHOLD,\n SLIDES_MANAGER_STATE,\n} from './constants';\nimport {\n calcMax,\n calcMin,\n calculateIndent,\n getLoopPoints,\n getTargetIndex,\n isBigger,\n isBiggerOrEqual,\n isLowerOrEqual,\n revertRtlValue,\n validateIndent,\n} from './helpers';\nimport { useSlideAnimation } from './hooks';\nimport {\n type BaseGalleryProps,\n type ControlElementsState,\n type GallerySlidesState,\n type SlidesManagerState,\n} from './types';\nimport styles from './CarouselBase.module.css';\n\nconst warn = warnOnce('Gallery');\n\nexport const CarouselBase = ({\n bullets = false,\n getRootRef,\n children,\n slideWidth = '100%',\n slideIndex = 0,\n dragDisabled = false,\n resizeSource = 'window',\n onDragStart,\n onDragEnd,\n onChange,\n onPrevClick,\n onNextClick,\n align = 'left',\n showArrows,\n getRef,\n arrowSize,\n arrowAreaHeight,\n arrowNextLabel,\n arrowPrevLabel,\n slideTestId,\n bulletTestId,\n nextArrowTestId,\n prevArrowTestId,\n looped = false,\n ...restProps\n}: BaseGalleryProps): React.ReactNode => {\n const slidesStore = React.useRef<Record<string, HTMLDivElement | null>>({});\n const slidesManager = React.useRef<SlidesManagerState>(SLIDES_MANAGER_STATE);\n const textDirection = useConfigDirection();\n const isRtl = textDirection === 'rtl';\n\n const rootRef = useExternRef(getRootRef);\n const viewportRef = useExternRef(getRef);\n const layerRef = React.useRef<HTMLDivElement>(null);\n const animationFrameRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);\n const shiftXCurrentRef = React.useRef<number>(0);\n const shiftXDeltaRef = React.useRef<number>(0);\n const initialized = React.useRef<boolean>(false);\n const { addToAnimationQueue, getAnimateFunction, startAnimation } = useSlideAnimation();\n const isDragging = React.useRef(false);\n\n const [controlElementsState, setControlElementsState] =\n React.useState<ControlElementsState>(CONTROL_ELEMENTS_STATE);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const isCenterAlign = align === 'center';\n\n const calculateCanSlideLeft = () => {\n if (looped) {\n return !slidesManager.current.isFullyVisible;\n }\n const isStartShiftX = isBiggerOrEqual(shiftXCurrentRef.current, 0, isRtl);\n return !slidesManager.current.isFullyVisible && !isStartShiftX;\n };\n\n const calculateCanSlideRight = () => {\n if (looped) {\n return !slidesManager.current.isFullyVisible;\n }\n return (\n !slidesManager.current.isFullyVisible &&\n // we can't move right when gallery layer fully scrolled right, if gallery aligned by left side\n ((align === 'left' &&\n slidesManager.current.containerWidth - revertRtlValue(shiftXCurrentRef.current, isRtl) <\n (slidesManager.current.layerWidth ?? 0)) ||\n // otherwise we need to check current slide index (align = right or align = center)\n (align !== 'left' && slideIndex < slidesManager.current.slides.length - 1))\n );\n };\n\n const transformCssStyles = (shiftX: number, animation = false) => {\n shiftX = Math.round(shiftX);\n if (looped) {\n slidesManager.current.loopPoints.forEach((loopPoint) => {\n const { target, index } = loopPoint;\n const slide = slidesStore.current[index];\n if (slide) {\n slide.style.transform = `translate3d(${target(shiftX)}px, 0, 0)`;\n }\n });\n } else {\n Object.values(slidesStore.current).forEach((slide) => {\n if (slide) {\n slide.style.transform = '';\n }\n });\n }\n\n if (layerRef.current) {\n const indent =\n isDragging.current && !looped\n ? validateIndent(\n slidesManager.current,\n shiftXCurrentRef.current + shiftXDeltaRef.current,\n isRtl,\n false,\n )\n : shiftX;\n\n layerRef.current.style.transform = `translate3d(${indent}px, 0, 0)`;\n layerRef.current.style.transition = animation\n ? `transform ${ANIMATION_DURATION}ms cubic-bezier(.1, 0, .25, 1)`\n : '';\n }\n };\n\n const checkShiftOutOfBoundsFromStart = (shiftX: number, snaps: number[]) =>\n isBigger(shiftX, snaps[0], isRtl);\n\n const checkShiftOutOfBoundsFromEnd = (shiftX: number, slides: GallerySlidesState[]) => {\n /**\n * Поскольку при `align=\"center\"` слайды сдвинуты, прежде чем рассчитать крайнюю правую точку,\n * нужно вычесть сдвиг слайдов.\n */\n const firstSlideShift =\n align === 'center'\n ? (slidesManager.current.containerWidth - slidesManager.current.slides[0].width) / 2\n : 0;\n\n const lastPoint =\n slides[slides.length - 1].width + slides[slides.length - 1].coordX - firstSlideShift;\n return isRtl ? shiftX >= lastPoint : shiftX <= -lastPoint;\n };\n\n const requestTransform = (shiftX: number, animation = false) => {\n const { snaps, contentSize, slides } = slidesManager.current;\n\n if (animationFrameRef.current !== null) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n animationFrameRef.current = requestAnimationFrame(() => {\n /**\n * Для бесконечной галереи проверяем, что при dnd мы прокрутили левее, чем первый слайд,\n * чтобы сбросить `shiftXCurrentRef`.\n */\n if (looped && checkShiftOutOfBoundsFromStart(shiftX, snaps)) {\n const firstSnap = revertRtlValue(snaps[0], isRtl);\n shiftXCurrentRef.current = revertRtlValue(-contentSize + firstSnap, isRtl);\n shiftX = shiftXCurrentRef.current + shiftXDeltaRef.current;\n }\n\n /**\n * Для бесконечной галереи проверяем, что при dnd мы прокрутили правее, чем последний слайд,\n * чтобы правильно пересчитать `shiftXCurrentRef`.\n */\n if (looped && checkShiftOutOfBoundsFromEnd(shiftX, slides)) {\n shiftXCurrentRef.current = Math.abs(shiftXDeltaRef.current) + snaps[0];\n }\n transformCssStyles(shiftX, animation);\n });\n };\n\n const initializeSlides = () => {\n if (!rootRef.current || !viewportRef.current || !layerRef.current) {\n return;\n }\n const layerOffsetWidth = layerRef.current.offsetWidth;\n\n const calcRtlCoord = (element: HTMLDivElement) => {\n const offsetLeft = element.offsetLeft;\n const offsetWidth = element.offsetWidth;\n return layerOffsetWidth - offsetLeft - offsetWidth;\n };\n\n let localSlides =\n React.Children.map(children, (_item, i): GallerySlidesState => {\n const elem = slidesStore.current[i];\n if (!elem) {\n return { coordX: 0, width: 0 };\n }\n const coordX = isRtl ? calcRtlCoord(elem) : elem.offsetLeft;\n return { coordX, width: elem.offsetWidth };\n }) || [];\n\n if (localSlides.length === 0) {\n initialized.current = false;\n return;\n }\n\n const containerWidth = rootRef.current.offsetWidth;\n const viewportOffsetWidth = viewportRef.current.offsetWidth;\n const layerWidth = localSlides.reduce((val, slide) => slide.width + val, 0);\n\n if (process.env.NODE_ENV === 'development' && looped) {\n let remainingWidth = containerWidth;\n let slideIndex = 0;\n\n while (remainingWidth > 0 && slideIndex < localSlides.length) {\n remainingWidth -= localSlides[slideIndex].width;\n slideIndex++;\n }\n if (remainingWidth <= 0 && slideIndex === localSlides.length) {\n warn(\n 'Ширины слайдов недостаточно для корректной работы свойства \"looped\". Пожалуйста, сделайте её больше.',\n );\n }\n }\n\n const currentSlideOffsetOnCenterAlignment =\n (containerWidth - (localSlides[slideIndex]?.width ?? 0)) / 2;\n const isFullyVisible =\n align === 'center'\n ? layerWidth + currentSlideOffsetOnCenterAlignment <= containerWidth\n : layerWidth <= containerWidth;\n\n const onlyOneSlide = localSlides.length === 1;\n\n slidesManager.current = {\n ...slidesManager.current,\n layerWidth,\n containerWidth,\n viewportOffsetWidth,\n slides: localSlides,\n isFullyVisible,\n max:\n looped || onlyOneSlide\n ? null\n : calcMax({\n slides: localSlides,\n containerWidth,\n isCenterAlign,\n isRtl,\n }),\n min:\n looped || onlyOneSlide\n ? null\n : calcMin({\n containerWidth,\n layerWidth,\n slides: localSlides,\n viewportOffsetWidth,\n isFullyVisible,\n align,\n isRtl,\n }),\n };\n const snaps = localSlides.map((_, index) =>\n calculateIndent({\n targetIndex: index,\n slidesManager: slidesManager.current,\n isCenter: isCenterAlign,\n looped,\n isRtl,\n }),\n );\n\n let contentSize = Math.abs(snaps[snaps.length - 1]) + localSlides[localSlides.length - 1].width;\n if (align === 'center') {\n contentSize += revertRtlValue(snaps[0], isRtl);\n }\n\n slidesManager.current.snaps = snaps;\n slidesManager.current.contentSize = contentSize;\n // Если галерея не зациклена и слайд всего один, то рассчитывать loopPoints тоже не надо\n if (looped && !onlyOneSlide && !isFullyVisible) {\n slidesManager.current.loopPoints = getLoopPoints(\n slidesManager.current,\n containerWidth,\n isRtl,\n );\n }\n\n shiftXCurrentRef.current = snaps[slideIndex];\n initialized.current = true;\n\n setControlElementsState({\n canSlideLeft: calculateCanSlideLeft(),\n canSlideRight: calculateCanSlideRight(),\n isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),\n });\n requestTransform(shiftXCurrentRef.current);\n };\n\n const onResize = () => {\n if (initialized.current) {\n initializeSlides();\n }\n };\n const { window } = useDOM();\n useResizeObserver(resizeSource === 'element' ? rootRef : window, onResize);\n\n const loopedSlideChangePerform = () => {\n const { snaps, slides } = slidesManager.current;\n const indent = snaps[slideIndex];\n let startPoint = shiftXCurrentRef.current;\n\n const fromLastToFirst = isLowerOrEqual(\n shiftXCurrentRef.current,\n snaps[snaps.length - 1],\n isRtl,\n );\n /**\n * Переключаемся с последнего элемента на первый\n * Для корректной анимации мы прокручиваем последний слайд на всю длину (shiftX) \"вперед\"\n * В конце анимации при отрисовке следующего кадра задаем всем слайдам начальные значения.\n */\n if (indent === snaps[0] && fromLastToFirst) {\n const endEdge = revertRtlValue(\n Math.abs(snaps[snaps.length - 1]) + slides[slides.length - 1].width,\n isRtl,\n );\n const distance = endEdge + startPoint;\n addToAnimationQueue(\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * -1;\n\n transformCssStyles(shiftX);\n\n if (shiftX <= snaps[snaps.length - 1] - slides[slides.length - 1].width) {\n requestAnimationFrame(() => {\n shiftXCurrentRef.current = indent;\n transformCssStyles(snaps[0]);\n });\n }\n }),\n );\n /**\n * Переключаемся с первого слайда на последний\n * Для корректной анимации сначала задаем первым видимым слайдам смещение\n * В следующем кадре начинаем анимация прокрутки \"назад\".\n */\n } else if (indent === snaps[snaps.length - 1] && shiftXCurrentRef.current === snaps[0]) {\n startPoint = indent - revertRtlValue(slides[slides.length - 1].width, isRtl);\n\n addToAnimationQueue(() => {\n requestAnimationFrame(() => {\n const shiftX = indent - revertRtlValue(slides[slides.length - 1].width, isRtl);\n transformCssStyles(shiftX);\n\n getAnimateFunction((progress) => {\n const diff = revertRtlValue(progress * slides[slides.length - 1].width, isRtl);\n transformCssStyles(startPoint + diff);\n })();\n });\n });\n /**\n * Если не обработаны `corner`-кейсы выше, то просто проигрываем анимацию смещения.\n */\n } else {\n addToAnimationQueue(() => {\n const distance = Math.abs(indent - startPoint);\n let direction = startPoint <= indent ? 1 : -1;\n\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * direction;\n transformCssStyles(shiftX);\n })();\n });\n }\n };\n\n const simpleSlideChangePerform = () => {\n const { snaps } = slidesManager.current;\n requestTransform(snaps[slideIndex], true);\n };\n\n useIsomorphicLayoutEffect(\n function performSlideChange() {\n if (!initialized.current) {\n return;\n }\n const { snaps } = slidesManager.current;\n const indent = snaps[slideIndex];\n\n if (looped) {\n loopedSlideChangePerform();\n } else {\n simpleSlideChangePerform();\n }\n\n startAnimation();\n\n shiftXCurrentRef.current = indent;\n\n setControlElementsState((v) => ({\n ...v,\n canSlideLeft: calculateCanSlideLeft(),\n canSlideRight: calculateCanSlideRight(),\n }));\n },\n [slideIndex],\n );\n\n useIsomorphicLayoutEffect(\n function updateIsDraggable() {\n setControlElementsState((v) => ({\n ...v,\n isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),\n }));\n },\n [dragDisabled],\n );\n\n useMutationObserver(layerRef, initializeSlides);\n\n useIsomorphicLayoutEffect(initializeSlides, [align, slideWidth, looped, isRtl]);\n\n const calculateMinDeltaXToSlide = () => {\n return slidesManager.current.slides[slideIndex].width * SLIDE_THRESHOLD;\n };\n\n const slideLeft = (event: React.MouseEvent) => {\n if (slideIndex > 0) {\n shiftXCurrentRef.current += revertRtlValue(calculateMinDeltaXToSlide(), isRtl);\n }\n onChange?.(\n (slideIndex - 1 + slidesManager.current.slides.length) % slidesManager.current.slides.length,\n );\n onPrevClick?.(event);\n };\n\n const slideRight = (event: React.MouseEvent) => {\n if (slideIndex < slidesManager.current.slides.length - 1) {\n shiftXCurrentRef.current -= revertRtlValue(calculateMinDeltaXToSlide(), isRtl);\n }\n onChange?.((slideIndex + 1) % slidesManager.current.slides.length);\n onNextClick?.(event);\n };\n\n const onStart = (e: CustomTouchEvent) => {\n e.originalEvent.stopPropagation();\n if (controlElementsState.isDraggable) {\n onDragStart?.(e);\n shiftXCurrentRef.current = slidesManager.current.snaps[slideIndex];\n shiftXDeltaRef.current = 0;\n }\n };\n\n const onMoveX = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n e.originalEvent.preventDefault();\n\n if (e.isSlideX) {\n isDragging.current = true;\n if (shiftXDeltaRef.current !== e.shiftX) {\n shiftXDeltaRef.current = e.shiftX;\n requestTransform(shiftXCurrentRef.current + shiftXDeltaRef.current);\n }\n }\n }\n };\n\n const onEnd = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n isDragging.current = false;\n let targetIndex = slideIndex;\n if (e.isSlide) {\n targetIndex = getTargetIndex({\n slides: slidesManager.current.slides,\n slideIndex,\n currentShiftX: shiftXCurrentRef.current,\n currentShiftXDelta: shiftXDeltaRef.current,\n max: slidesManager.current.max,\n looped,\n isRtl,\n });\n }\n onDragEnd?.(e, targetIndex);\n\n if (targetIndex !== slideIndex) {\n shiftXCurrentRef.current = shiftXCurrentRef.current + shiftXDeltaRef.current;\n onChange?.(targetIndex);\n } else {\n const initialShiftX = slidesManager.current.snaps[targetIndex];\n requestTransform(initialShiftX, true);\n }\n }\n };\n\n const setSlideRef = (slideRef: HTMLDivElement | null, slideIndex: number) => {\n slidesStore.current[slideIndex] = slideRef;\n };\n\n const { isDraggable, canSlideRight, canSlideLeft } = controlElementsState;\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n slideWidth === 'custom' && styles.customWidth,\n isDraggable && styles.draggable,\n )}\n getRootRef={rootRef}\n >\n <CarouselViewPort\n slideWidth={slideWidth}\n slideTestId={slideTestId}\n onStart={onStart}\n onMoveX={onMoveX}\n onEnd={onEnd}\n getRootRef={viewportRef}\n layerRef={layerRef}\n setSlideRef={setSlideRef}\n >\n {children}\n </CarouselViewPort>\n\n {bullets && (\n <Bullets\n bullets={bullets}\n slideIndex={slideIndex}\n count={React.Children.count(children)}\n bulletTestId={bulletTestId}\n />\n )}\n <ScrollArrows\n hasPointer={hasPointer}\n canSlideLeft={canSlideLeft}\n canSlideRight={canSlideRight}\n onSlideRight={slideRight}\n onSlideLeft={slideLeft}\n showArrows={showArrows}\n arrowSize={arrowSize}\n arrowAreaHeight={arrowAreaHeight}\n arrowPrevLabel={arrowPrevLabel}\n arrowNextLabel={arrowNextLabel}\n prevArrowTestId={prevArrowTestId}\n nextArrowTestId={nextArrowTestId}\n />\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivityHasPointer","useConfigDirection","useExternRef","useMutationObserver","useResizeObserver","useDOM","useIsomorphicLayoutEffect","warnOnce","RootComponent","Bullets","CarouselViewPort","ScrollArrows","ANIMATION_DURATION","CONTROL_ELEMENTS_STATE","SLIDE_THRESHOLD","SLIDES_MANAGER_STATE","calcMax","calcMin","calculateIndent","getLoopPoints","getTargetIndex","isBigger","isBiggerOrEqual","isLowerOrEqual","revertRtlValue","validateIndent","useSlideAnimation","warn","CarouselBase","bullets","getRootRef","children","slideWidth","slideIndex","dragDisabled","resizeSource","onDragStart","onDragEnd","onChange","onPrevClick","onNextClick","align","showArrows","getRef","arrowSize","arrowAreaHeight","arrowNextLabel","arrowPrevLabel","slideTestId","bulletTestId","nextArrowTestId","prevArrowTestId","looped","restProps","slidesStore","useRef","slidesManager","textDirection","isRtl","rootRef","viewportRef","layerRef","animationFrameRef","shiftXCurrentRef","shiftXDeltaRef","initialized","addToAnimationQueue","getAnimateFunction","startAnimation","isDragging","controlElementsState","setControlElementsState","useState","hasPointer","isCenterAlign","calculateCanSlideLeft","current","isFullyVisible","isStartShiftX","calculateCanSlideRight","containerWidth","layerWidth","slides","length","transformCssStyles","shiftX","animation","Math","round","loopPoints","forEach","loopPoint","target","index","slide","style","transform","Object","values","indent","transition","checkShiftOutOfBoundsFromStart","snaps","checkShiftOutOfBoundsFromEnd","firstSlideShift","width","lastPoint","coordX","requestTransform","contentSize","cancelAnimationFrame","requestAnimationFrame","firstSnap","abs","initializeSlides","localSlides","layerOffsetWidth","offsetWidth","calcRtlCoord","element","offsetLeft","Children","map","_item","i","elem","viewportOffsetWidth","reduce","val","process","env","NODE_ENV","remainingWidth","currentSlideOffsetOnCenterAlignment","onlyOneSlide","max","min","_","targetIndex","isCenter","canSlideLeft","canSlideRight","isDraggable","onResize","window","loopedSlideChangePerform","startPoint","fromLastToFirst","endEdge","distance","progress","diff","direction","simpleSlideChangePerform","performSlideChange","v","updateIsDraggable","calculateMinDeltaXToSlide","slideLeft","event","slideRight","onStart","e","originalEvent","stopPropagation","onMoveX","preventDefault","isSlideX","onEnd","isSlide","currentShiftX","currentShiftXDelta","initialShiftX","setSlideRef","slideRef","baseClassName","count","onSlideRight","onSlideLeft"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CarouselBase/CarouselBase.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useMutationObserver } from '../../hooks/useMutationObserver';\nimport { useResizeObserver } from '../../hooks/useResizeObserver';\nimport { useDOM } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { type CustomTouchEvent } from '../Touch/Touch';\nimport { Bullets } from './Bullets';\nimport { CarouselViewPort } from './CarouselViewPort';\nimport { ScrollArrows } from './ScrollArrows';\nimport {\n ANIMATION_DURATION,\n CONTROL_ELEMENTS_STATE,\n SLIDE_THRESHOLD,\n SLIDES_MANAGER_STATE,\n} from './constants';\nimport {\n calcMax,\n calcMin,\n calculateIndent,\n getLoopPoints,\n getTargetIndex,\n isBigger,\n isBiggerOrEqual,\n isLowerOrEqual,\n revertRtlValue,\n validateIndent,\n} from './helpers';\nimport { useSlideAnimation } from './hooks';\nimport {\n type BaseGalleryProps,\n type ControlElementsState,\n type GallerySlidesState,\n type SlidesManagerState,\n} from './types';\nimport styles from './CarouselBase.module.css';\n\nconst warn = warnOnce('Gallery');\n\nexport const CarouselBase = ({\n bullets = false,\n getRootRef,\n children,\n slideWidth = '100%',\n slideIndex = 0,\n dragDisabled = false,\n resizeSource = 'window',\n onDragStart,\n onDragEnd,\n onChange,\n onPrevClick,\n onNextClick,\n align = 'left',\n showArrows,\n getRef,\n arrowSize,\n arrowAreaHeight,\n arrowNextLabel,\n arrowPrevLabel,\n slideTestId,\n bulletTestId,\n nextArrowTestId,\n prevArrowTestId,\n looped = false,\n ...restProps\n}: BaseGalleryProps): React.ReactNode => {\n const slidesStore = React.useRef<Record<string, HTMLDivElement | null>>({});\n const slidesManager = React.useRef<SlidesManagerState>(SLIDES_MANAGER_STATE);\n const textDirection = useConfigDirection();\n const isRtl = textDirection === 'rtl';\n\n const rootRef = useExternRef(getRootRef);\n const viewportRef = useExternRef(getRef);\n const layerRef = React.useRef<HTMLDivElement>(null);\n const animationFrameRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);\n const shiftXCurrentRef = React.useRef<number>(0);\n const shiftXDeltaRef = React.useRef<number>(0);\n const initialized = React.useRef<boolean>(false);\n const { animationInQueue, addToAnimationQueue, getAnimateFunction, startAnimation } =\n useSlideAnimation();\n const isDragging = React.useRef(false);\n\n const [controlElementsState, setControlElementsState] =\n React.useState<ControlElementsState>(CONTROL_ELEMENTS_STATE);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const isCenterAlign = align === 'center';\n\n const calculateCanSlideLeft = () => {\n if (looped) {\n return !slidesManager.current.isFullyVisible;\n }\n const isStartShiftX = isBiggerOrEqual(shiftXCurrentRef.current, 0, isRtl);\n return !slidesManager.current.isFullyVisible && !isStartShiftX;\n };\n\n const calculateCanSlideRight = () => {\n if (looped) {\n return !slidesManager.current.isFullyVisible;\n }\n return (\n !slidesManager.current.isFullyVisible &&\n // we can't move right when gallery layer fully scrolled right, if gallery aligned by left side\n ((align === 'left' &&\n slidesManager.current.containerWidth - revertRtlValue(shiftXCurrentRef.current, isRtl) <\n (slidesManager.current.layerWidth ?? 0)) ||\n // otherwise we need to check current slide index (align = right or align = center)\n (align !== 'left' && slideIndex < slidesManager.current.slides.length - 1))\n );\n };\n\n const transformCssStyles = (shiftX: number, animation = false) => {\n shiftX = Math.round(shiftX);\n if (looped) {\n slidesManager.current.loopPoints.forEach((loopPoint) => {\n const { target, index } = loopPoint;\n const slide = slidesStore.current[index];\n if (slide) {\n slide.style.transform = `translate3d(${target(shiftX)}px, 0, 0)`;\n }\n });\n } else {\n Object.values(slidesStore.current).forEach((slide) => {\n if (slide) {\n slide.style.transform = '';\n }\n });\n }\n\n if (layerRef.current) {\n const indent =\n isDragging.current && !looped\n ? validateIndent(\n slidesManager.current,\n shiftXCurrentRef.current + shiftXDeltaRef.current,\n isRtl,\n false,\n )\n : shiftX;\n\n layerRef.current.style.transform = `translate3d(${indent}px, 0, 0)`;\n layerRef.current.style.transition = animation\n ? `transform ${ANIMATION_DURATION}ms cubic-bezier(.1, 0, .25, 1)`\n : '';\n }\n };\n\n const checkShiftOutOfBoundsFromStart = (shiftX: number, snaps: number[]) =>\n isBigger(shiftX, snaps[0], isRtl);\n\n const checkShiftOutOfBoundsFromEnd = (shiftX: number, slides: GallerySlidesState[]) => {\n /**\n * Поскольку при `align=\"center\"` слайды сдвинуты, прежде чем рассчитать крайнюю правую точку,\n * нужно вычесть сдвиг слайдов.\n */\n const firstSlideShift =\n align === 'center'\n ? (slidesManager.current.containerWidth - slidesManager.current.slides[0].width) / 2\n : 0;\n\n const lastPoint =\n slides[slides.length - 1].width + slides[slides.length - 1].coordX - firstSlideShift;\n return isRtl ? shiftX >= lastPoint : shiftX <= -lastPoint;\n };\n\n const requestTransform = (shiftX: number, animation = false) => {\n const { snaps, contentSize, slides } = slidesManager.current;\n\n if (animationFrameRef.current !== null) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n animationFrameRef.current = requestAnimationFrame(() => {\n /**\n * Для бесконечной галереи проверяем, что при dnd мы прокрутили левее, чем первый слайд,\n * чтобы сбросить `shiftXCurrentRef`.\n */\n if (looped && checkShiftOutOfBoundsFromStart(shiftX, snaps)) {\n const firstSnap = revertRtlValue(snaps[0], isRtl);\n shiftXCurrentRef.current = revertRtlValue(-contentSize + firstSnap, isRtl);\n shiftX = shiftXCurrentRef.current + shiftXDeltaRef.current;\n }\n\n /**\n * Для бесконечной галереи проверяем, что при dnd мы прокрутили правее, чем последний слайд,\n * чтобы правильно пересчитать `shiftXCurrentRef`.\n */\n if (looped && checkShiftOutOfBoundsFromEnd(shiftX, slides)) {\n shiftXCurrentRef.current = Math.abs(shiftXDeltaRef.current) + snaps[0];\n }\n transformCssStyles(shiftX, animation);\n animationFrameRef.current = null;\n });\n };\n\n const initializeSlides = () => {\n if (!rootRef.current || !viewportRef.current || !layerRef.current) {\n return;\n }\n const layerOffsetWidth = layerRef.current.offsetWidth;\n\n const calcRtlCoord = (element: HTMLDivElement) => {\n const offsetLeft = element.offsetLeft;\n const offsetWidth = element.offsetWidth;\n return layerOffsetWidth - offsetLeft - offsetWidth;\n };\n\n let localSlides =\n React.Children.map(children, (_item, i): GallerySlidesState => {\n const elem = slidesStore.current[i];\n if (!elem) {\n return { coordX: 0, width: 0 };\n }\n const coordX = isRtl ? calcRtlCoord(elem) : elem.offsetLeft;\n return { coordX, width: elem.offsetWidth };\n }) || [];\n\n if (localSlides.length === 0) {\n initialized.current = false;\n return;\n }\n\n const containerWidth = rootRef.current.offsetWidth;\n const viewportOffsetWidth = viewportRef.current.offsetWidth;\n const layerWidth = localSlides.reduce((val, slide) => slide.width + val, 0);\n\n if (process.env.NODE_ENV === 'development' && looped) {\n let remainingWidth = containerWidth;\n let slideIndex = 0;\n\n while (remainingWidth > 0 && slideIndex < localSlides.length) {\n remainingWidth -= localSlides[slideIndex].width;\n slideIndex++;\n }\n if (remainingWidth <= 0 && slideIndex === localSlides.length) {\n warn(\n 'Ширины слайдов недостаточно для корректной работы свойства \"looped\". Пожалуйста, сделайте её больше.',\n );\n }\n }\n\n const currentSlideOffsetOnCenterAlignment =\n (containerWidth - (localSlides[slideIndex]?.width ?? 0)) / 2;\n const isFullyVisible =\n align === 'center'\n ? layerWidth + currentSlideOffsetOnCenterAlignment <= containerWidth\n : layerWidth <= containerWidth;\n\n const onlyOneSlide = localSlides.length === 1;\n\n slidesManager.current = {\n ...slidesManager.current,\n layerWidth,\n containerWidth,\n viewportOffsetWidth,\n slides: localSlides,\n isFullyVisible,\n max:\n looped || onlyOneSlide\n ? null\n : calcMax({\n slides: localSlides,\n containerWidth,\n isCenterAlign,\n isRtl,\n }),\n min:\n looped || onlyOneSlide\n ? null\n : calcMin({\n containerWidth,\n layerWidth,\n slides: localSlides,\n viewportOffsetWidth,\n isFullyVisible,\n align,\n isRtl,\n }),\n };\n const snaps = localSlides.map((_, index) =>\n calculateIndent({\n targetIndex: index,\n slidesManager: slidesManager.current,\n isCenter: isCenterAlign,\n looped,\n isRtl,\n }),\n );\n\n let contentSize = Math.abs(snaps[snaps.length - 1]) + localSlides[localSlides.length - 1].width;\n if (align === 'center') {\n contentSize += revertRtlValue(snaps[0], isRtl);\n }\n\n slidesManager.current.snaps = snaps;\n slidesManager.current.contentSize = contentSize;\n // Если галерея не зациклена и слайд всего один, то рассчитывать loopPoints тоже не надо\n if (looped && !onlyOneSlide && !isFullyVisible) {\n slidesManager.current.loopPoints = getLoopPoints(\n slidesManager.current,\n containerWidth,\n isRtl,\n );\n }\n\n const isAnimationInProgress = animationInQueue() || animationFrameRef.current !== null;\n\n if (isAnimationInProgress) {\n return;\n }\n\n shiftXCurrentRef.current = snaps[slideIndex];\n initialized.current = true;\n\n setControlElementsState({\n canSlideLeft: calculateCanSlideLeft(),\n canSlideRight: calculateCanSlideRight(),\n isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),\n });\n requestTransform(shiftXCurrentRef.current);\n };\n\n const onResize = () => {\n if (initialized.current) {\n initializeSlides();\n }\n };\n const { window } = useDOM();\n useResizeObserver(resizeSource === 'element' ? rootRef : window, onResize);\n\n const loopedSlideChangePerform = () => {\n const { snaps, slides } = slidesManager.current;\n const indent = snaps[slideIndex];\n let startPoint = shiftXCurrentRef.current;\n\n const fromLastToFirst = isLowerOrEqual(\n shiftXCurrentRef.current,\n snaps[snaps.length - 1],\n isRtl,\n );\n /**\n * Переключаемся с последнего элемента на первый\n * Для корректной анимации мы прокручиваем последний слайд на всю длину (shiftX) \"вперед\"\n * В конце анимации при отрисовке следующего кадра задаем всем слайдам начальные значения.\n */\n if (indent === snaps[0] && fromLastToFirst) {\n const endEdge = revertRtlValue(\n Math.abs(snaps[snaps.length - 1]) + slides[slides.length - 1].width,\n isRtl,\n );\n const distance = endEdge + startPoint;\n addToAnimationQueue(\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * -1;\n\n transformCssStyles(shiftX);\n\n if (shiftX <= snaps[snaps.length - 1] - slides[slides.length - 1].width) {\n requestAnimationFrame(() => {\n shiftXCurrentRef.current = indent;\n transformCssStyles(snaps[0]);\n });\n }\n }),\n );\n /**\n * Переключаемся с первого слайда на последний\n * Для корректной анимации сначала задаем первым видимым слайдам смещение\n * В следующем кадре начинаем анимация прокрутки \"назад\".\n */\n } else if (indent === snaps[snaps.length - 1] && shiftXCurrentRef.current === snaps[0]) {\n startPoint = indent - revertRtlValue(slides[slides.length - 1].width, isRtl);\n\n addToAnimationQueue(() => {\n requestAnimationFrame(() => {\n const shiftX = indent - revertRtlValue(slides[slides.length - 1].width, isRtl);\n transformCssStyles(shiftX);\n\n getAnimateFunction((progress) => {\n const diff = revertRtlValue(progress * slides[slides.length - 1].width, isRtl);\n transformCssStyles(startPoint + diff);\n })();\n });\n });\n /**\n * Если не обработаны `corner`-кейсы выше, то просто проигрываем анимацию смещения.\n */\n } else {\n addToAnimationQueue(() => {\n const distance = Math.abs(indent - startPoint);\n let direction = startPoint <= indent ? 1 : -1;\n\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * direction;\n transformCssStyles(shiftX);\n })();\n });\n }\n };\n\n const simpleSlideChangePerform = () => {\n const { snaps } = slidesManager.current;\n requestTransform(snaps[slideIndex], true);\n };\n\n useIsomorphicLayoutEffect(\n function performSlideChange() {\n if (!initialized.current) {\n return;\n }\n const { snaps } = slidesManager.current;\n const indent = snaps[slideIndex];\n\n if (looped) {\n loopedSlideChangePerform();\n } else {\n simpleSlideChangePerform();\n }\n\n startAnimation();\n\n shiftXCurrentRef.current = indent;\n\n setControlElementsState((v) => ({\n ...v,\n canSlideLeft: calculateCanSlideLeft(),\n canSlideRight: calculateCanSlideRight(),\n }));\n },\n [slideIndex],\n );\n\n useIsomorphicLayoutEffect(\n function updateIsDraggable() {\n setControlElementsState((v) => ({\n ...v,\n isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),\n }));\n },\n [dragDisabled],\n );\n\n useMutationObserver(layerRef, initializeSlides);\n\n useIsomorphicLayoutEffect(initializeSlides, [align, slideWidth, looped, isRtl]);\n\n const calculateMinDeltaXToSlide = () => {\n return slidesManager.current.slides[slideIndex].width * SLIDE_THRESHOLD;\n };\n\n const slideLeft = (event: React.MouseEvent) => {\n if (slideIndex > 0) {\n shiftXCurrentRef.current += revertRtlValue(calculateMinDeltaXToSlide(), isRtl);\n }\n onChange?.(\n (slideIndex - 1 + slidesManager.current.slides.length) % slidesManager.current.slides.length,\n );\n onPrevClick?.(event);\n };\n\n const slideRight = (event: React.MouseEvent) => {\n if (slideIndex < slidesManager.current.slides.length - 1) {\n shiftXCurrentRef.current -= revertRtlValue(calculateMinDeltaXToSlide(), isRtl);\n }\n onChange?.((slideIndex + 1) % slidesManager.current.slides.length);\n onNextClick?.(event);\n };\n\n const onStart = (e: CustomTouchEvent) => {\n e.originalEvent.stopPropagation();\n if (controlElementsState.isDraggable) {\n onDragStart?.(e);\n shiftXCurrentRef.current = slidesManager.current.snaps[slideIndex];\n shiftXDeltaRef.current = 0;\n }\n };\n\n const onMoveX = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n e.originalEvent.preventDefault();\n\n if (e.isSlideX) {\n isDragging.current = true;\n if (shiftXDeltaRef.current !== e.shiftX) {\n shiftXDeltaRef.current = e.shiftX;\n requestTransform(shiftXCurrentRef.current + shiftXDeltaRef.current);\n }\n }\n }\n };\n\n const onEnd = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n isDragging.current = false;\n let targetIndex = slideIndex;\n if (e.isSlide) {\n targetIndex = getTargetIndex({\n slides: slidesManager.current.slides,\n slideIndex,\n currentShiftX: shiftXCurrentRef.current,\n currentShiftXDelta: shiftXDeltaRef.current,\n max: slidesManager.current.max,\n looped,\n isRtl,\n });\n }\n onDragEnd?.(e, targetIndex);\n\n if (targetIndex !== slideIndex) {\n shiftXCurrentRef.current = shiftXCurrentRef.current + shiftXDeltaRef.current;\n onChange?.(targetIndex);\n } else {\n const initialShiftX = slidesManager.current.snaps[targetIndex];\n requestTransform(initialShiftX, true);\n }\n }\n };\n\n const setSlideRef = (slideRef: HTMLDivElement | null, slideIndex: number) => {\n slidesStore.current[slideIndex] = slideRef;\n };\n\n const { isDraggable, canSlideRight, canSlideLeft } = controlElementsState;\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n slideWidth === 'custom' && styles.customWidth,\n isDraggable && styles.draggable,\n )}\n getRootRef={rootRef}\n >\n <CarouselViewPort\n slideWidth={slideWidth}\n slideTestId={slideTestId}\n onStart={onStart}\n onMoveX={onMoveX}\n onEnd={onEnd}\n getRootRef={viewportRef}\n layerRef={layerRef}\n setSlideRef={setSlideRef}\n >\n {children}\n </CarouselViewPort>\n\n {bullets && (\n <Bullets\n bullets={bullets}\n slideIndex={slideIndex}\n count={React.Children.count(children)}\n bulletTestId={bulletTestId}\n />\n )}\n <ScrollArrows\n hasPointer={hasPointer}\n canSlideLeft={canSlideLeft}\n canSlideRight={canSlideRight}\n onSlideRight={slideRight}\n onSlideLeft={slideLeft}\n showArrows={showArrows}\n arrowSize={arrowSize}\n arrowAreaHeight={arrowAreaHeight}\n arrowPrevLabel={arrowPrevLabel}\n arrowNextLabel={arrowNextLabel}\n prevArrowTestId={prevArrowTestId}\n nextArrowTestId={nextArrowTestId}\n />\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivityHasPointer","useConfigDirection","useExternRef","useMutationObserver","useResizeObserver","useDOM","useIsomorphicLayoutEffect","warnOnce","RootComponent","Bullets","CarouselViewPort","ScrollArrows","ANIMATION_DURATION","CONTROL_ELEMENTS_STATE","SLIDE_THRESHOLD","SLIDES_MANAGER_STATE","calcMax","calcMin","calculateIndent","getLoopPoints","getTargetIndex","isBigger","isBiggerOrEqual","isLowerOrEqual","revertRtlValue","validateIndent","useSlideAnimation","warn","CarouselBase","bullets","getRootRef","children","slideWidth","slideIndex","dragDisabled","resizeSource","onDragStart","onDragEnd","onChange","onPrevClick","onNextClick","align","showArrows","getRef","arrowSize","arrowAreaHeight","arrowNextLabel","arrowPrevLabel","slideTestId","bulletTestId","nextArrowTestId","prevArrowTestId","looped","restProps","slidesStore","useRef","slidesManager","textDirection","isRtl","rootRef","viewportRef","layerRef","animationFrameRef","shiftXCurrentRef","shiftXDeltaRef","initialized","animationInQueue","addToAnimationQueue","getAnimateFunction","startAnimation","isDragging","controlElementsState","setControlElementsState","useState","hasPointer","isCenterAlign","calculateCanSlideLeft","current","isFullyVisible","isStartShiftX","calculateCanSlideRight","containerWidth","layerWidth","slides","length","transformCssStyles","shiftX","animation","Math","round","loopPoints","forEach","loopPoint","target","index","slide","style","transform","Object","values","indent","transition","checkShiftOutOfBoundsFromStart","snaps","checkShiftOutOfBoundsFromEnd","firstSlideShift","width","lastPoint","coordX","requestTransform","contentSize","cancelAnimationFrame","requestAnimationFrame","firstSnap","abs","initializeSlides","localSlides","layerOffsetWidth","offsetWidth","calcRtlCoord","element","offsetLeft","Children","map","_item","i","elem","viewportOffsetWidth","reduce","val","process","env","NODE_ENV","remainingWidth","currentSlideOffsetOnCenterAlignment","onlyOneSlide","max","min","_","targetIndex","isCenter","isAnimationInProgress","canSlideLeft","canSlideRight","isDraggable","onResize","window","loopedSlideChangePerform","startPoint","fromLastToFirst","endEdge","distance","progress","diff","direction","simpleSlideChangePerform","performSlideChange","v","updateIsDraggable","calculateMinDeltaXToSlide","slideLeft","event","slideRight","onStart","e","originalEvent","stopPropagation","onMoveX","preventDefault","isSlideX","onEnd","isSlide","currentShiftX","currentShiftXDelta","initialShiftX","setSlideRef","slideRef","baseClassName","count","onSlideRight","onSlideLeft"],"mappings":"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"}
|
|
@@ -3,5 +3,6 @@ export declare function useSlideAnimation(): {
|
|
|
3
3
|
getAnimateFunction: (drawFunction: DrawInterface) => () => void;
|
|
4
4
|
addToAnimationQueue: (func: VoidFunction) => void;
|
|
5
5
|
startAnimation: () => void;
|
|
6
|
+
animationInQueue: () => boolean;
|
|
6
7
|
};
|
|
7
8
|
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMhE,wBAAgB,iBAAiB,IAAI;IACnC,kBAAkB,EAAE,CAAC,YAAY,EAAE,aAAa,KAAK,MAAM,IAAI,CAAC;IAChE,mBAAmB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,cAAc,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMhE,wBAAgB,iBAAiB,IAAI;IACnC,kBAAkB,EAAE,CAAC,YAAY,EAAE,aAAa,KAAK,MAAM,IAAI,CAAC;IAChE,mBAAmB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,OAAO,CAAC;CACjC,CAkCA"}
|
|
@@ -23,7 +23,11 @@ export function useSlideAnimation() {
|
|
|
23
23
|
animationQueue.current[0]();
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
function animationInQueue() {
|
|
27
|
+
return !!animationQueue.current.length;
|
|
28
|
+
}
|
|
26
29
|
return {
|
|
30
|
+
animationInQueue,
|
|
27
31
|
getAnimateFunction,
|
|
28
32
|
addToAnimationQueue,
|
|
29
33
|
startAnimation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CarouselBase/hooks.ts"],"sourcesContent":["import * as React from 'react';\nimport { animate, type DrawInterface } from '../../lib/animate';\nimport { cubicBezier } from '../../lib/fx';\nimport { ANIMATION_DURATION } from './constants';\n\nconst TIMING_FUNCTION = cubicBezier(0.8, 1);\n\nexport function useSlideAnimation(): {\n getAnimateFunction: (drawFunction: DrawInterface) => () => void;\n addToAnimationQueue: (func: VoidFunction) => void;\n startAnimation: () => void;\n} {\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n function getAnimateFunction(drawFunction: DrawInterface) {\n return () => {\n animate({\n duration: ANIMATION_DURATION,\n timing: TIMING_FUNCTION,\n animationQueue: animationQueue.current,\n draw: drawFunction,\n });\n };\n }\n\n function addToAnimationQueue(func: VoidFunction) {\n animationQueue.current.push(func);\n }\n\n function startAnimation() {\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n }\n\n return {\n getAnimateFunction,\n addToAnimationQueue,\n startAnimation,\n };\n}\n"],"names":["React","animate","cubicBezier","ANIMATION_DURATION","TIMING_FUNCTION","useSlideAnimation","animationQueue","useRef","getAnimateFunction","drawFunction","duration","timing","current","draw","addToAnimationQueue","func","push","startAnimation","length"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,OAAO,QAA4B,uBAAoB;AAChE,SAASC,WAAW,QAAQ,kBAAe;AAC3C,SAASC,kBAAkB,QAAQ,iBAAc;AAEjD,MAAMC,kBAAkBF,YAAY,KAAK;AAEzC,OAAO,SAASG;
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CarouselBase/hooks.ts"],"sourcesContent":["import * as React from 'react';\nimport { animate, type DrawInterface } from '../../lib/animate';\nimport { cubicBezier } from '../../lib/fx';\nimport { ANIMATION_DURATION } from './constants';\n\nconst TIMING_FUNCTION = cubicBezier(0.8, 1);\n\nexport function useSlideAnimation(): {\n getAnimateFunction: (drawFunction: DrawInterface) => () => void;\n addToAnimationQueue: (func: VoidFunction) => void;\n startAnimation: () => void;\n animationInQueue: () => boolean;\n} {\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n function getAnimateFunction(drawFunction: DrawInterface) {\n return () => {\n animate({\n duration: ANIMATION_DURATION,\n timing: TIMING_FUNCTION,\n animationQueue: animationQueue.current,\n draw: drawFunction,\n });\n };\n }\n\n function addToAnimationQueue(func: VoidFunction) {\n animationQueue.current.push(func);\n }\n\n function startAnimation() {\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n }\n\n function animationInQueue() {\n return !!animationQueue.current.length;\n }\n\n return {\n animationInQueue,\n getAnimateFunction,\n addToAnimationQueue,\n startAnimation,\n };\n}\n"],"names":["React","animate","cubicBezier","ANIMATION_DURATION","TIMING_FUNCTION","useSlideAnimation","animationQueue","useRef","getAnimateFunction","drawFunction","duration","timing","current","draw","addToAnimationQueue","func","push","startAnimation","length","animationInQueue"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,OAAO,QAA4B,uBAAoB;AAChE,SAASC,WAAW,QAAQ,kBAAe;AAC3C,SAASC,kBAAkB,QAAQ,iBAAc;AAEjD,MAAMC,kBAAkBF,YAAY,KAAK;AAEzC,OAAO,SAASG;IAMd,MAAMC,iBAAiBN,MAAMO,MAAM,CAAiB,EAAE;IAEtD,SAASC,mBAAmBC,YAA2B;QACrD,OAAO;YACLR,QAAQ;gBACNS,UAAUP;gBACVQ,QAAQP;gBACRE,gBAAgBA,eAAeM,OAAO;gBACtCC,MAAMJ;YACR;QACF;IACF;IAEA,SAASK,oBAAoBC,IAAkB;QAC7CT,eAAeM,OAAO,CAACI,IAAI,CAACD;IAC9B;IAEA,SAASE;QACP,IAAIX,eAAeM,OAAO,CAACM,MAAM,KAAK,GAAG;YACvCZ,eAAeM,OAAO,CAAC,EAAE;QAC3B;IACF;IAEA,SAASO;QACP,OAAO,CAAC,CAACb,eAAeM,OAAO,CAACM,MAAM;IACxC;IAEA,OAAO;QACLC;QACAX;QACAM;QACAG;IACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAe,MAAM,8BAA8B,CAAC;AAEnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,uCAAuC,CAAC;AAe/C,OAAO,KAAK,EACV,2BAA2B,EAC3B,wBAAwB,EAExB,cAAc,EACf,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"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"}
|
|
@@ -52,8 +52,10 @@ const FetchingStatus = ({ fetching = false, options, fetchingInProgressLabel = '
|
|
|
52
52
|
if (fetching) {
|
|
53
53
|
setStatus('fetching');
|
|
54
54
|
} else {
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
if (status === 'fetching') {
|
|
56
|
+
setStatus('loaded');
|
|
57
|
+
setTimeout(()=>setStatus('none'), FETCH_STATUS_RESET_DELAY);
|
|
58
|
+
}
|
|
57
59
|
}
|
|
58
60
|
}, [
|
|
59
61
|
fetching
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getRequiredValueByKey } from '../../helpers/getValueByKey';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { preventDefault } from '../../lib/utils';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport type { NativeSelectProps, SelectValue } from '../NativeSelect/NativeSelect';\nimport { NOT_SELECTED, remapFromNativeValueToSelectValue } from '../NativeSelect/NativeSelect';\nimport type { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { type CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport {\n CustomSelectInput,\n type CustomSelectInputProps,\n} from './CustomSelectInput/CustomSelectInput';\nimport {\n checkMixControlledAndUncontrolledState,\n checkOptionsValueType,\n filter,\n findSelectedIndex,\n getOptionByValue,\n} from './helpers';\nimport { useAfterItems } from './hooks/useAfterItems';\nimport { useDropdownOpenedController } from './hooks/useDropdownOpenedController';\nimport { useFocusedOptionController } from './hooks/useFocusedOptionController';\nimport { useInputKeyboardController } from './hooks/useInputKeyboardController';\nimport { useInputValueController } from './hooks/useInputValueController';\nimport { useScrollListController } from './hooks/useScrollListController';\nimport { useSelectedOptionController } from './hooks/useSelectedOptionController';\nimport type {\n CustomSelectOptionInterface,\n CustomSelectRenderOption,\n MousePosition,\n PopupDirection,\n} from './types';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nfunction isMousePositionChanged(event: React.MouseEvent, prevPosition: MousePosition) {\n return (\n Math.abs(prevPosition.x - event.clientX) >= 1 || Math.abs(prevPosition.y - event.clientY) >= 1\n );\n}\n\nconst FETCH_STATUS_RESET_DELAY = 2000;\n\nconst FetchingStatus = ({\n fetching = false,\n options,\n fetchingInProgressLabel = 'Список опций загружается...',\n fetchingCompletedLabel = `Загружено опций: ${options.length}`,\n}: Pick<\n SelectProps,\n 'fetching' | 'fetchingInProgressLabel' | 'fetchingCompletedLabel' | 'options'\n>) => {\n const [status, setStatus] = React.useState<'fetching' | 'loaded' | 'none'>('none');\n\n const content = getRequiredValueByKey(status, {\n fetching: fetchingInProgressLabel,\n loaded:\n typeof fetchingCompletedLabel === 'function'\n ? fetchingCompletedLabel(options.length)\n : fetchingCompletedLabel,\n none: '',\n });\n\n useIsomorphicLayoutEffect(\n function updateStatus() {\n if (fetching) {\n setStatus('fetching');\n } else {\n setStatus('loaded');\n setTimeout(() => setStatus('none'), FETCH_STATUS_RESET_DELAY);\n }\n },\n [fetching],\n );\n\n return <VisuallyHidden aria-live=\"polite\">{content}</VisuallyHidden>;\n};\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n Omit<FormFieldProps, 'maxHeight'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'>,\n Pick<CustomSelectInputProps, 'minLength' | 'maxLength' | 'pattern' | 'readOnly'> {\n /**\n * Ref на внутрений компонент input.\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при нажатии на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля.\n */\n onInputChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * Список опций в списке.\n */\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n /**\n * Направление раскрытия выпадающего списка.\n */\n popupDirection?: PopupDirection;\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkui.io/components/custom-select#custom-select-option-api).\n *\n * > ⚠️ Важно: свойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => 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 /**\n * Обработчик закрытия выпадающего списка.\n */\n onClose?: VoidFunction;\n /**\n * Обработчик открытия выпадающего списка.\n */\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка.\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`.\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения.\n */\n allowClearButton?: boolean;\n /**\n * Передает атрибут `data-testid` для кнопки очистки.\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка.\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента.\n */\n dropdownAutoWidth?: boolean;\n /**\n * Использовать Portal для рендеринга выпадающего списка.\n */\n forceDropdownPortal?: boolean;\n /**\n * Тип отображения компонента.\n */\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию.\n */\n noMaxHeight?: boolean;\n /**\n * Передает атрибут `data-testid` для элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n /**\n * Передает атрибут `data-testid` для нативного элемента `select`.\n */\n nativeSelectTestId?: string;\n /**\n * Обработчик события `keyDown` в поле ввода.\n */\n onInputKeyDown?: (e: React.KeyboardEvent, isOpen: boolean) => void;\n /**\n * Включает режим в котором выбранное значение `CustomSelect` читается скринридерами корректно.\n * В данном режиме введенное в поле ввода значение не сбрасывается при потере фокуса.\n */\n accessible?: boolean /* TODO [>=v8] включить по умолчанию */;\n /**\n * Текстовая метка для индикации процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Список опций загружается...\"`.\n */\n fetchingInProgressLabel?: string;\n /**\n * Текстовая метка для индикации завершения процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Загружено опций: ${options.length}\"`.\n */\n fetchingCompletedLabel?: string | ((optionsCount: number) => string);\n}\n\n/**\n * @see https://vkui.io/components/custom-select\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n 'onInputChange': onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n searchable = false,\n 'renderOption': renderOptionProp = defaultRenderOptionFn,\n 'options': options,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n 'icon': iconProp,\n ClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n 'aria-labelledby': ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n 'onInputKeyDown': onInputKeyDownProp,\n readOnly,\n accessible = false,\n fetchingInProgressLabel,\n fetchingCompletedLabel,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(options);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const selectElRef = useExternRef(getRef);\n const selectInputRef = useExternRef(getSelectInputRef);\n\n const propsValue = React.useMemo<SelectValue | undefined>(() => {\n if (props.value === undefined) {\n return undefined;\n }\n return getOptionByValue(options, props.value)?.value ?? null;\n }, [options, props.value]);\n\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n\n const {\n nativeSelectValue,\n setNativeSelectValue,\n selectedOptionValue,\n setSelectedOptionValue,\n onNativeSelectChange,\n } = useSelectedOptionController({\n value: propsValue,\n defaultValue,\n isControlledOutside,\n allowClearButton,\n onChange,\n });\n\n const selected = React.useMemo(\n () => options.find((option) => option.value === selectedOptionValue),\n [options, selectedOptionValue],\n );\n\n const { inputValue, onInputChange, resetInputValue, resetInputValueBySelectedOption } =\n useInputValueController({\n options,\n accessible,\n selectedValue: selectedOptionValue,\n onInputChange: onInputChangeProp,\n });\n\n const filteredOptions = React.useMemo(\n () => filter(options, searchable ? inputValue : '', filterFn),\n [filterFn, inputValue, options, searchable],\n );\n\n const { scrollToElement, optionsWrapperRef, scrollBoxRef } = useScrollListController();\n\n const {\n focusedOptionValue,\n setFocusedOptionValue,\n resetFocusedOption,\n focusOptionByIndex,\n focusOption,\n selectFocusedValue,\n } = useFocusedOptionController({\n selectedOptionValue,\n filteredOptions,\n scrollToElement,\n });\n\n const scrollToSelectedOption = () => {\n scrollToElement(findSelectedIndex(filteredOptions, selectedOptionValue), true);\n };\n\n const { opened, open, close, toggleOpened } = useDropdownOpenedController({\n onOpen: callMultiple(selectFocusedValue, onOpen),\n onOpened: scrollToSelectedOption,\n onClose,\n onClosed: accessible ? resetInputValueBySelectedOption : resetInputValue,\n });\n\n React.useEffect(\n function updateOptionsValue() {\n const value =\n propsValue !== undefined\n ? propsValue\n : remapFromNativeValueToSelectValue(nativeSelectValue);\n setSelectedOptionValue(value);\n setFocusedOptionValue(value);\n },\n [propsValue, nativeSelectValue, setFocusedOptionValue, setSelectedOptionValue],\n );\n\n React.useEffect(\n function syncIsControlledState() {\n setIsControlledOutside((oldIsControlled) => {\n const newIsControlled = propsValue !== undefined;\n checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);\n return newIsControlled;\n });\n },\n [propsValue],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (\n filteredOptions.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE)\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const selectOption = React.useCallback(\n (value: Exclude<SelectValue, null>) => {\n setNativeSelectValue(value ?? NOT_SELECTED.NATIVE);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside && propsValue !== nativeSelectValue && nativeSelectValue === value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, setNativeSelectValue, isControlledOutside, propsValue, nativeSelectValue, selectElRef],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionValue === null) {\n return;\n }\n\n selectOption(focusedOptionValue);\n }, [focusedOptionValue, selectOption]);\n\n const onInputKeyDown = useInputKeyboardController({\n opened,\n open,\n close,\n resetFocusedOption,\n selectFocused,\n focusOption,\n scrollBoxRef,\n onInputKeyDown: onInputKeyDownProp,\n });\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\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 = filteredOptions[index];\n\n if (option && !option.disabled) {\n selectOption(option.value);\n }\n },\n [filteredOptions, selectOption],\n );\n\n const lastMousePositionRef = React.useRef<MousePosition>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n if (isMousePositionChanged(e, lastMousePositionRef.current)) {\n focusOptionByIndex(index, false);\n }\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = option.value === focusedOptionValue;\n const selected = option.value === selectedOptionValue;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: preventDefault,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n ...option,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionValue,\n selectedOptionValue,\n renderOptionProp,\n handleOptionClick,\n popupAriaId,\n focusOptionOnMouseMove,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n filteredOptions.length > 0 ? (\n <div ref={optionsWrapperRef}>{filteredOptions.map(renderOption)}</div>\n ) : (\n <Footnote className={styles.empty}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, filteredOptions, optionsWrapperRef, renderDropdown, renderOption]);\n\n const afterItems = useAfterItems({\n value: propsValue,\n nativeSelectValue,\n isControlledOutside,\n opened,\n allowClearButton,\n ClearButton,\n onClearButtonClick: () => {\n setNativeSelectValue(NOT_SELECTED.NATIVE);\n resetInputValue();\n selectInputRef.current && selectInputRef.current.focus();\n },\n clearButtonTestId,\n disabled: restProps.disabled,\n readOnly,\n icon: iconProp,\n });\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n selectInputRef.current.focus();\n }\n }\n },\n [document, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantId = focusedOptionValue !== null ? focusedOptionValue : undefined;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-expanded': opened,\n 'aria-activedescendant':\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const resetOptionFocusOnMouseLeave = React.useCallback(\n (event: React.MouseEvent) => {\n // В Хроме eсли мышка пользователя находится над инпутом селекта,\n // и он с клавиатуры открывает опции, причём одна из опций\n // уже выбрана, то видно, как выбранная опция получает фокус,\n // но потом сразу же его теряет.\n // Связано это с тем, что в этот момент вызывается onMouseLeave, на который у нас\n // завязан сброс состония фокуса у опции. По хорошему фокус должен оставаться.\n // Нам не интересен вызов onMouseLeave если мышка при этом не двигалась.\n if (isMousePositionChanged(event, lastMousePositionRef.current)) {\n resetFocusedOption();\n }\n },\n [resetFocusedOption],\n );\n\n return (\n <div\n className={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n onMouseMove={function updateLastMousePosition(e) {\n lastMousePositionRef.current = { x: e.clientX, y: e.clientY };\n }}\n >\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={readOnly || !searchable}\n fetching={fetching}\n searchable={searchable}\n accessible={accessible}\n value={inputValue}\n onKeyDown={!readOnly ? onInputKeyDown : undefined}\n onChange={onInputChange}\n onClick={!readOnly ? toggleOpened : undefined}\n before={before}\n after={afterItems}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n\n <FetchingStatus\n fetching={fetching}\n options={filteredOptions}\n fetchingInProgressLabel={fetchingInProgressLabel}\n fetchingCompletedLabel={fetchingCompletedLabel}\n />\n <select\n tabIndex={-1}\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles.control}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && (\n <option key={NOT_SELECTED.NATIVE} value={NOT_SELECTED.NATIVE} />\n )}\n {options.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetOptionFocusOnMouseLeave}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","getRequiredValueByKey","useAdaptivity","useExternRef","callMultiple","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","preventDefault","CustomSelectDropdown","CustomSelectOption","NOT_SELECTED","remapFromNativeValueToSelectValue","Footnote","VisuallyHidden","CustomSelectInput","checkMixControlledAndUncontrolledState","checkOptionsValueType","filter","findSelectedIndex","getOptionByValue","useAfterItems","useDropdownOpenedController","useFocusedOptionController","useInputKeyboardController","useInputValueController","useScrollListController","useSelectedOptionController","sizeYClassNames","none","compact","defaultRenderOptionFn","option","props","isMousePositionChanged","event","prevPosition","Math","abs","x","clientX","y","clientY","FETCH_STATUS_RESET_DELAY","FetchingStatus","fetching","options","fetchingInProgressLabel","fetchingCompletedLabel","length","status","setStatus","useState","content","loaded","updateStatus","setTimeout","aria-live","CustomSelect","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","renderDropdown","onOpen","onClose","forceDropdownPortal","selectType","searchable","renderOptionProp","emptyText","filterFn","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","onInputKeyDownProp","readOnly","accessible","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","selectElRef","selectInputRef","propsValue","useMemo","value","undefined","isControlledOutside","setIsControlledOutside","popperPlacement","setPopperPlacement","nativeSelectValue","setNativeSelectValue","selectedOptionValue","setSelectedOptionValue","onNativeSelectChange","selected","find","inputValue","onInputChange","resetInputValue","resetInputValueBySelectedOption","selectedValue","filteredOptions","scrollToElement","optionsWrapperRef","scrollBoxRef","focusedOptionValue","setFocusedOptionValue","resetFocusedOption","focusOptionByIndex","focusOption","selectFocusedValue","scrollToSelectedOption","opened","open","close","toggleOpened","onOpened","onClosed","useEffect","updateOptionsValue","syncIsControlledState","oldIsControlled","newIsControlled","some","NATIVE","Event","bubbles","current","dispatchEvent","openedClassNames","includes","selectOption","useCallback","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","onInputKeyDown","onBlur","onFocus","handleOptionClick","e","index","Array","prototype","indexOf","call","currentTarget","parentNode","disabled","lastMousePositionRef","focusOptionOnMouseMove","popupAriaId","useId","renderOption","hovered","Fragment","label","onClick","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","ref","map","afterItems","onClearButtonClick","focus","icon","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","target","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantId","selectInputAriaProps","resetOptionFocusOnMouseLeave","updateLastMousePosition","autoComplete","autoCapitalize","autoCorrect","spellCheck","onKeyDown","after","select","tabIndex","aria-hidden","data-testid","item","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,qBAAqB,QAAQ,iCAA8B;AACpE,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,YAAY,QAAQ,4BAAyB;AACtD,SAASC,MAAM,QAAQ,mBAAgB;AAEvC,SAASC,eAAe,QAAuB,sBAAmB;AAClE,SAASC,yBAAyB,QAAQ,yCAAsC;AAChF,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SACEC,oBAAoB,QAEf,kDAA+C;AACtD,SAASC,kBAAkB,QAAQ,8CAA2C;AAG9E,SAASC,YAAY,EAAEC,iCAAiC,QAAQ,kCAA+B;AAE/F,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,cAAc,QAAQ,sCAAmC;AAElE,SACEC,iBAAiB,QAEZ,2CAAwC;AAC/C,SACEC,sCAAsC,EACtCC,qBAAqB,EACrBC,MAAM,EACNC,iBAAiB,EACjBC,gBAAgB,QACX,eAAY;AACnB,SAASC,aAAa,QAAQ,2BAAwB;AACtD,SAASC,2BAA2B,QAAQ,yCAAsC;AAClF,SAASC,0BAA0B,QAAQ,wCAAqC;AAChF,SAASC,0BAA0B,QAAQ,wCAAqC;AAChF,SAASC,uBAAuB,QAAQ,qCAAkC;AAC1E,SAASC,uBAAuB,QAAQ,qCAAkC;AAC1E,SAASC,2BAA2B,QAAQ,yCAAsC;AASlF,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAEA,SAASC,sBAA6D;QAAA,EACpEC,MAAM,EAEsB,GAHwC,QAEjEC,mCAFiE;QACpED;;IAGA,qBAAO,KAACtB,uCAAuBuB;AACjC;AAEA,SAASC,uBAAuBC,KAAuB,EAAEC,YAA2B;IAClF,OACEC,KAAKC,GAAG,CAACF,aAAaG,CAAC,GAAGJ,MAAMK,OAAO,KAAK,KAAKH,KAAKC,GAAG,CAACF,aAAaK,CAAC,GAAGN,MAAMO,OAAO,KAAK;AAEjG;AAEA,MAAMC,2BAA2B;AAEjC,MAAMC,iBAAiB,CAAC,EACtBC,WAAW,KAAK,EAChBC,OAAO,EACPC,0BAA0B,6BAA6B,EACvDC,yBAAyB,CAAC,iBAAiB,EAAEF,QAAQG,MAAM,EAAE,EAI9D;IACC,MAAM,CAACC,QAAQC,UAAU,GAAGpD,MAAMqD,QAAQ,CAAiC;IAE3E,MAAMC,UAAUpD,sBAAsBiD,QAAQ;QAC5CL,UAAUE;QACVO,QACE,OAAON,2BAA2B,aAC9BA,uBAAuBF,QAAQG,MAAM,IACrCD;QACNnB,MAAM;IACR;IAEAtB,0BACE,SAASgD;QACP,IAAIV,UAAU;YACZM,UAAU;QACZ,OAAO;YACLA,UAAU;YACVK,WAAW,IAAML,UAAU,SAASR;QACtC;IACF,GACA;QAACE;KAAS;IAGZ,qBAAO,KAAC/B;QAAe2C,aAAU;kBAAUJ;;AAC7C;AAsIA;;CAEC,GACD,OAAO,SAASK,aACdzB,KAAoC;IAEpC,MAAM,EACJ0B,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,MAAM,EACNC,UAAU,EACVC,iBAAiB,QAAQ,EACzBC,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACR,iBAAiBC,iBAAiB,EAClCC,cAAc,EACdC,MAAM,EACNC,OAAO,EACP1B,QAAQ,EACR2B,mBAAmB,EACnBC,aAAa,SAAS,EACtBC,aAAa,KAAK,EAClB,gBAAgBC,mBAAmB5C,qBAAqB,EACxD,WAAWe,OAAO,EAClB8B,YAAY,mBAAmB,EAC/BC,WAAWvE,eAAe,EAC1B,QAAQwE,QAAQ,EAChBC,WAAW,EACXC,mBAAmB,KAAK,EACxBC,yBAAyB,CAAC,EAC1BC,oBAAoB,KAAK,EACzBC,cAAc,KAAK,EACnB,mBAAmBC,cAAc,EACjCC,iBAAiB,EACjBC,kBAAkB,EAClBC,YAAY,EACZC,QAAQ,EACRC,iBAAiB,EACjBC,kBAAkB,EAClB,kBAAkBC,kBAAkB,EACpCC,QAAQ,EACRC,aAAa,KAAK,EAClB9C,uBAAuB,EACvBC,sBAAsB,EAEvB,GAAGf,OADC6D,uCACD7D;QAxCF0B;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACA;QACAE;QACAC;QACAC;QACA1B;QACA2B;QACAC;QACAC;QACA;QACA;QACAE;QACAC;QACA;QACAE;QACAC;QACAC;QACAC;QACAC;QACA;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QACA;QACAE;QACAC;QACA9C;QACAC;;IAIF,IAAI+C,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1ChF,sBAAsB6B;IACxB;IAEA,MAAM,EAAEoD,QAAQ,MAAM,EAAE,GAAGhG;IAE3B,MAAMiG,eAAepG,MAAMqG,MAAM,CAAiB;IAClD,MAAMC,gBAAgBlG,aAAagG,cAAcpC;IACjD,MAAMuC,cAAcnG,aAAa2D;IACjC,MAAMyC,iBAAiBpG,aAAasF;IAEpC,MAAMe,aAAazG,MAAM0G,OAAO,CAA0B;YAIjDrF;QAHP,IAAIa,MAAMyE,KAAK,KAAKC,WAAW;YAC7B,OAAOA;QACT;YACOvF;QAAP,OAAOA,CAAAA,2BAAAA,oBAAAA,iBAAiB0B,SAASb,MAAMyE,KAAK,eAArCtF,wCAAAA,kBAAwCsF,KAAK,cAA7CtF,qCAAAA,0BAAiD;IAC1D,GAAG;QAAC0B;QAASb,MAAMyE,KAAK;KAAC;IAEzB,MAAM,CAACE,qBAAqBC,uBAAuB,GAAG9G,MAAMqD,QAAQ,CAACnB,MAAMyE,KAAK,KAAKC;IACrF,MAAM,CAACG,iBAAiBC,mBAAmB,GAAGhH,MAAMqD,QAAQ,CAAYY;IAExE,MAAM,EACJgD,iBAAiB,EACjBC,oBAAoB,EACpBC,mBAAmB,EACnBC,sBAAsB,EACtBC,oBAAoB,EACrB,GAAGzF,4BAA4B;QAC9B+E,OAAOF;QACPjB;QACAqB;QACA5B;QACAd;IACF;IAEA,MAAMmD,WAAWtH,MAAM0G,OAAO,CAC5B,IAAM3D,QAAQwE,IAAI,CAAC,CAACtF,SAAWA,OAAO0E,KAAK,KAAKQ,sBAChD;QAACpE;QAASoE;KAAoB;IAGhC,MAAM,EAAEK,UAAU,EAAEC,aAAa,EAAEC,eAAe,EAAEC,+BAA+B,EAAE,GACnFjG,wBAAwB;QACtBqB;QACA+C;QACA8B,eAAeT;QACfM,eAAepD;IACjB;IAEF,MAAMwD,kBAAkB7H,MAAM0G,OAAO,CACnC,IAAMvF,OAAO4B,SAAS4B,aAAa6C,aAAa,IAAI1C,WACpD;QAACA;QAAU0C;QAAYzE;QAAS4B;KAAW;IAG7C,MAAM,EAAEmD,eAAe,EAAEC,iBAAiB,EAAEC,YAAY,EAAE,GAAGrG;IAE7D,MAAM,EACJsG,kBAAkB,EAClBC,qBAAqB,EACrBC,kBAAkB,EAClBC,kBAAkB,EAClBC,WAAW,EACXC,kBAAkB,EACnB,GAAG9G,2BAA2B;QAC7B2F;QACAU;QACAC;IACF;IAEA,MAAMS,yBAAyB;QAC7BT,gBAAgB1G,kBAAkByG,iBAAiBV,sBAAsB;IAC3E;IAEA,MAAM,EAAEqB,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,YAAY,EAAE,GAAGpH,4BAA4B;QACxEgD,QAAQlE,aAAaiI,oBAAoB/D;QACzCqE,UAAUL;QACV/D;QACAqE,UAAU/C,aAAa6B,kCAAkCD;IAC3D;IAEA1H,MAAM8I,SAAS,CACb,SAASC;QACP,MAAMpC,QACJF,eAAeG,YACXH,aACA5F,kCAAkCoG;QACxCG,uBAAuBT;QACvBuB,sBAAsBvB;IACxB,GACA;QAACF;QAAYQ;QAAmBiB;QAAuBd;KAAuB;IAGhFpH,MAAM8I,SAAS,CACb,SAASE;QACPlC,uBAAuB,CAACmC;YACtB,MAAMC,kBAAkBzC,eAAeG;YACvC3F,uCAAuCgI,iBAAiBC;YACxD,OAAOA;QACT;IACF,GACA;QAACzC;KAAW;IAGdjG,0BAA0B;QACxB,IACEqH,gBAAgBsB,IAAI,CAAC,CAAC,EAAExC,KAAK,EAAE,GAAKM,sBAAsBN,UACzD1B,oBAAoBgC,sBAAsBrG,aAAawI,MAAM,EAC9D;gBAGA7C;YAFA,MAAMnE,QAAQ,IAAIiH,MAAM,UAAU;gBAAEC,SAAS;YAAK;aAElD/C,uBAAAA,YAAYgD,OAAO,cAAnBhD,2CAAAA,qBAAqBiD,aAAa,CAACpH;QACrC;IACF,GAAG;QAAC6E;KAAkB;IAEtB,MAAMwC,mBAAmBzJ,MAAM0G,OAAO,CACpC,IACE,AAAC8B,UACCtD,2BAA2B,KAC1B6B,CAAAA,gBAAgB2C,QAAQ,CAAC,gEAAqC,KACjE9C,WACF;QAAC1B;QAAwBsD;QAAQzB;KAAgB;IAGnD,MAAM4C,eAAe3J,MAAM4J,WAAW,CACpC,CAACjD;QACCO,qBAAqBP,kBAAAA,mBAAAA,QAAS/F,aAAawI,MAAM;QACjDV;QAEA,MAAMmB,8DACJhD,uBAAuBJ,eAAeQ,qBAAqBA,sBAAsBN;QAEnF,IAAIkD,6DAA6D;gBAE/DtD;YADA,MAAMnE,QAAQ,IAAIiH,MAAM,UAAU;gBAAEC,SAAS;YAAK;aAClD/C,uBAAAA,YAAYgD,OAAO,cAAnBhD,2CAAAA,qBAAqBiD,aAAa,CAACpH;QACrC;IACF,GACA;QAACsG;QAAOxB;QAAsBL;QAAqBJ;QAAYQ;QAAmBV;KAAY;IAGhG,MAAMuD,gBAAgB9J,MAAM4J,WAAW,CAAC;QACtC,IAAI3B,uBAAuB,MAAM;YAC/B;QACF;QAEA0B,aAAa1B;IACf,GAAG;QAACA;QAAoB0B;KAAa;IAErC,MAAMI,iBAAiBtI,2BAA2B;QAChD+G;QACAC;QACAC;QACAP;QACA2B;QACAzB;QACAL;QACA+B,gBAAgBnE;IAClB;IAEA,MAAMoE,SAAShK,MAAM4J,WAAW,CAAC;YAG/BrD;QAFAmC;QACA,MAAMtG,QAAQ,IAAIiH,MAAM,YAAY;YAAEC,SAAS;QAAK;SACpD/C,uBAAAA,YAAYgD,OAAO,cAAnBhD,2CAAAA,qBAAqBiD,aAAa,CAACpH;IACrC,GAAG;QAACsG;QAAOnC;KAAY;IAEvB,MAAM0D,UAAUjK,MAAM4J,WAAW,CAAC;YAEhCrD;QADA,MAAMnE,QAAQ,IAAIiH,MAAM,WAAW;YAAEC,SAAS;QAAK;SACnD/C,uBAAAA,YAAYgD,OAAO,cAAnBhD,2CAAAA,qBAAqBiD,aAAa,CAACpH;IACrC,GAAG;QAACmE;KAAY;IAEhB,MAAM2D,oBAAoBlK,MAAM4J,WAAW,CACzC,CAACO;YAEGA;QADF,MAAMC,QAAQC,MAAMC,SAAS,CAACC,OAAO,CAACC,IAAI,EACxCL,8BAAAA,EAAEM,aAAa,CAACC,UAAU,cAA1BP,kDAAAA,4BAA4B/F,QAAQ,EACpC+F,EAAEM,aAAa;QAEjB,MAAMxI,SAAS4F,eAAe,CAACuC,MAAM;QAErC,IAAInI,UAAU,CAACA,OAAO0I,QAAQ,EAAE;YAC9BhB,aAAa1H,OAAO0E,KAAK;QAC3B;IACF,GACA;QAACkB;QAAiB8B;KAAa;IAGjC,MAAMiB,uBAAuB5K,MAAMqG,MAAM,CAAgB;QAAE7D,GAAG;QAAGE,GAAG;IAAE;IACtE,MAAMmI,yBAAyB7K,MAAM4J,WAAW,CAC9C,CAACO,GAAkCC;QACjC,IAAIjI,uBAAuBgI,GAAGS,qBAAqBrB,OAAO,GAAG;YAC3DnB,mBAAmBgC,OAAO;QAC5B;IACF,GACA;QAAChC;KAAmB;IAGtB,MAAM0C,cAAc9K,MAAM+K,KAAK;IAC/B,MAAMC,eAAehL,MAAM4J,WAAW,CACpC,CAAC3H,QAA0BmI;QACzB,MAAMa,UAAUhJ,OAAO0E,KAAK,KAAKsB;QACjC,MAAMX,WAAWrF,OAAO0E,KAAK,KAAKQ;QAElC,qBACE,KAACnH,MAAMkL,QAAQ;sBACZtG,iBAAiB;gBAChB3C;gBACAgJ;gBACA7G,UAAUnC,OAAOkJ,KAAK;gBACtB7D;gBACAqD,UAAU1I,OAAO0I,QAAQ;gBACzBS,SAASlB;gBACTmB,aAAa5K;gBACb,8DAA8D;gBAC9D,+DAA+D;gBAC/D,8FAA8F;gBAC9F,yIAAyI;gBACzI,sFAAsF;gBACtF,8EAA8E;gBAC9E,6IAA6I;gBAC7I6K,aAAa,CAACnB,IAAMU,uBAAuBV,GAAGC;gBAC9CmB,IAAI,GAAGT,YAAY,CAAC,EAAE7I,OAAO0E,KAAK,EAAE;eACjC1E;WAlBc,GAAG,OAAOA,OAAO0E,KAAK,CAAC,CAAC,EAAE1E,OAAO0E,KAAK,EAAE;IAsBjE,GACA;QACEsB;QACAd;QACAvC;QACAsF;QACAY;QACAD;KACD;IAGH,MAAMW,kBAAkBxL,MAAM0G,OAAO,CAAC;QACpC,MAAM+E,yBACJ5D,gBAAgB3E,MAAM,GAAG,kBACvB,KAACwI;YAAIC,KAAK5D;sBAAoBF,gBAAgB+D,GAAG,CAACZ;2BAElD,KAAClK;YAASgD,SAAS;sBAAiBe;;QAGxC,IAAI,OAAOP,mBAAmB,YAAY;YACxC,OAAOA,eAAe;gBAAEmH;YAAuB;QACjD,OAAO;YACL,OAAOA;QACT;IACF,GAAG;QAAC5G;QAAWgD;QAAiBE;QAAmBzD;QAAgB0G;KAAa;IAEhF,MAAMa,aAAavK,cAAc;QAC/BqF,OAAOF;QACPQ;QACAJ;QACA2B;QACAvD;QACAD;QACA8G,oBAAoB;YAClB5E,qBAAqBtG,aAAawI,MAAM;YACxC1B;YACAlB,eAAe+C,OAAO,IAAI/C,eAAe+C,OAAO,CAACwC,KAAK;QACxD;QACAzG;QACAqF,UAAU5E,UAAU4E,QAAQ;QAC5B9E;QACAmG,MAAMjH;IACR;IAEA,MAAM,EAAEkH,QAAQ,EAAE,GAAG3L;IACrB,MAAM4L,kCAAkClM,MAAM4J,WAAW,CACvD,CAACO;QACC,yGAAyG;QACzG,kGAAkG;QAClG,qHAAqH;QACrH,8EAA8E;QAC9E,8EAA8E;QAC9E,mGAAmG;QACnG,2FAA2F;QAC3F,8FAA8F;QAE9F,IAAI,CAAC3D,eAAe+C,OAAO,IAAI,CAAC0C,UAAU;YACxC;QACF;QAEA,MAAME,0BAA0BhC,EAAEiC,MAAM,KAAK5F,eAAe+C,OAAO;QACnE,IAAI4C,yBAAyB;YAC3B3F,eAAe+C,OAAO,CAAC8C,KAAK;YAE5B,MAAMC,oBAAoBL,SAASM,aAAa,KAAK/F,eAAe+C,OAAO;YAC3E,IAAI+C,mBAAmB;gBACrB9F,eAAe+C,OAAO,CAACwC,KAAK;YAC9B;QACF;IACF,GACA;QAACE;QAAUzF;KAAe;IAG5B,MAAMgG,mDAAmD,CACvDrC;QAEA,gFAAgF;QAChF,8EAA8E;QAC9E,sFAAsF;QACtF,MAAMsC,iBAAiBR,YAAYA,SAASM,aAAa,KAAK/F,eAAe+C,OAAO;QACpF,IAAIkD,gBAAgB;YAClBtC,EAAE1J,cAAc;QAClB;IACF;IAEA,MAAMiM,yBAAyBzE,uBAAuB,OAAOA,qBAAqBrB;IAElF,MAAM+F,uBAA0D;QAC9D,QAAQ;QACR,iBAAiB7B;QACjB,iBAAiBtC;QACjB,yBACEkE,0BAA0BlE,SAAS,GAAGsC,YAAY,CAAC,EAAE4B,wBAAwB,GAAG9F;QAClF,mBAAmBvB;QACnB,iBAAiB;QACjB,qBAAqB;IACvB;IAEA,MAAMuH,+BAA+B5M,MAAM4J,WAAW,CACpD,CAACxH;QACC,iEAAiE;QACjE,0DAA0D;QAC1D,6DAA6D;QAC7D,gCAAgC;QAChC,iFAAiF;QACjF,8EAA8E;QAC9E,wEAAwE;QACxE,IAAID,uBAAuBC,OAAOwI,qBAAqBrB,OAAO,GAAG;YAC/DpB;QACF;IACF,GACA;QAACA;KAAmB;IAGtB,qBACE,MAACuD;QACC5H,WAAW7D,qCAAwBkG,UAAU,aAAatE,eAAe,CAACsE,MAAM,EAAErC;QAClFI,OAAOA;QACPyH,KAAKrF;QACL8E,SAASc;QACTb,aAAamB;QACblB,aAAa,SAASuB,wBAAwB1C,CAAC;YAC7CS,qBAAqBrB,OAAO,GAAG;gBAAE/G,GAAG2H,EAAE1H,OAAO;gBAAEC,GAAGyH,EAAExH,OAAO;YAAC;QAC9D;;0BAEA,KAAC3B;gBACC8L,cAAa;gBACbC,gBAAe;gBACfC,aAAY;gBACZC,YAAW;eACPlH,WACA4G;gBACJ5I,QAAQyC;gBACRyD,SAASA;gBACTD,QAAQA;gBACRlG,WAAW2F;gBACX5D,UAAUA,YAAY,CAAClB;gBACvB7B,UAAUA;gBACV6B,YAAYA;gBACZmB,YAAYA;gBACZa,OAAOa;gBACP0F,WAAW,CAACrH,WAAWkE,iBAAiBnD;gBACxCzC,UAAUsD;gBACV2D,SAAS,CAACvF,WAAW8C,eAAe/B;gBACpChD,QAAQA;gBACRuJ,OAAOtB;gBACPnH,YAAYA;0BAEX4C,qBAAAA,+BAAAA,SAAU6D,KAAK;;0BAGlB,KAACtI;gBACCC,UAAUA;gBACVC,SAAS8E;gBACT7E,yBAAyBA;gBACzBC,wBAAwBA;;0BAE1B,MAACmK;gBACCC,UAAU,CAAC;gBACX1B,KAAKpF;gBACL1C,MAAMA;gBACNM,UAAUkD;gBACV2C,QAAQ9H,MAAM8H,MAAM;gBACpBC,SAAS/H,MAAM+H,OAAO;gBACtBmB,SAASlJ,MAAMkJ,OAAO;gBACtBzE,OAAOM;gBACPqG,aAAW;gBACXxJ,SAAS;gBACTyJ,eAAahI;gBACbE,UAAUA;;oBAERR,CAAAA,oBAAoBgC,sBAAsBrG,aAAawI,MAAM,AAAD,mBAC5D,KAACnH;wBAAiC0E,OAAO/F,aAAawI,MAAM;uBAA/CxI,aAAawI,MAAM;oBAEjCrG,QAAQ6I,GAAG,CAAC,CAAC4B,qBACZ,KAACvL;4BAA6B0E,OAAO6G,KAAK7G,KAAK;2BAAlC,GAAG6G,KAAK7G,KAAK,EAAE;;;YAG/B6B,wBACC,KAAC9H;gBACC+M,WAAWrH;gBACXsH,WAAW3G;gBACXiB,cAAcA;gBACd2F,mBAAmB3G;gBACnB4G,cAAchB;gBACd9J,UAAUA;gBACV6C,oBAAoBA;gBACpBkI,gBAAgB3I;gBAChB4I,WAAW3I;gBACX4I,aAAatJ;gBACbW,aAAaA;gBACb4I,MAAK;gBACLzC,IAAIT;gBACJmD,mBAAiB5I;gBACjBgI,UAAU,CAAC;0BAEV7B;;;;AAKX"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getRequiredValueByKey } from '../../helpers/getValueByKey';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { preventDefault } from '../../lib/utils';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport type { NativeSelectProps, SelectValue } from '../NativeSelect/NativeSelect';\nimport { NOT_SELECTED, remapFromNativeValueToSelectValue } from '../NativeSelect/NativeSelect';\nimport type { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { type CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport {\n CustomSelectInput,\n type CustomSelectInputProps,\n} from './CustomSelectInput/CustomSelectInput';\nimport {\n checkMixControlledAndUncontrolledState,\n checkOptionsValueType,\n filter,\n findSelectedIndex,\n getOptionByValue,\n} from './helpers';\nimport { useAfterItems } from './hooks/useAfterItems';\nimport { useDropdownOpenedController } from './hooks/useDropdownOpenedController';\nimport { useFocusedOptionController } from './hooks/useFocusedOptionController';\nimport { useInputKeyboardController } from './hooks/useInputKeyboardController';\nimport { useInputValueController } from './hooks/useInputValueController';\nimport { useScrollListController } from './hooks/useScrollListController';\nimport { useSelectedOptionController } from './hooks/useSelectedOptionController';\nimport type {\n CustomSelectOptionInterface,\n CustomSelectRenderOption,\n MousePosition,\n PopupDirection,\n} from './types';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nfunction isMousePositionChanged(event: React.MouseEvent, prevPosition: MousePosition) {\n return (\n Math.abs(prevPosition.x - event.clientX) >= 1 || Math.abs(prevPosition.y - event.clientY) >= 1\n );\n}\n\nconst FETCH_STATUS_RESET_DELAY = 2000;\n\nconst FetchingStatus = ({\n fetching = false,\n options,\n fetchingInProgressLabel = 'Список опций загружается...',\n fetchingCompletedLabel = `Загружено опций: ${options.length}`,\n}: Pick<\n SelectProps,\n 'fetching' | 'fetchingInProgressLabel' | 'fetchingCompletedLabel' | 'options'\n>) => {\n const [status, setStatus] = React.useState<'fetching' | 'loaded' | 'none'>('none');\n\n const content = getRequiredValueByKey(status, {\n fetching: fetchingInProgressLabel,\n loaded:\n typeof fetchingCompletedLabel === 'function'\n ? fetchingCompletedLabel(options.length)\n : fetchingCompletedLabel,\n none: '',\n });\n\n useIsomorphicLayoutEffect(\n function updateStatus() {\n if (fetching) {\n setStatus('fetching');\n } else {\n if (status === 'fetching') {\n setStatus('loaded');\n setTimeout(() => setStatus('none'), FETCH_STATUS_RESET_DELAY);\n }\n }\n },\n [fetching],\n );\n\n return <VisuallyHidden aria-live=\"polite\">{content}</VisuallyHidden>;\n};\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n Omit<FormFieldProps, 'maxHeight'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'>,\n Pick<CustomSelectInputProps, 'minLength' | 'maxLength' | 'pattern' | 'readOnly'> {\n /**\n * Ref на внутрений компонент input.\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при нажатии на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля.\n */\n onInputChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * Список опций в списке.\n */\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n /**\n * Направление раскрытия выпадающего списка.\n */\n popupDirection?: PopupDirection;\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkui.io/components/custom-select#custom-select-option-api).\n *\n * > ⚠️ Важно: свойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => 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 /**\n * Обработчик закрытия выпадающего списка.\n */\n onClose?: VoidFunction;\n /**\n * Обработчик открытия выпадающего списка.\n */\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка.\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`.\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения.\n */\n allowClearButton?: boolean;\n /**\n * Передает атрибут `data-testid` для кнопки очистки.\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка.\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента.\n */\n dropdownAutoWidth?: boolean;\n /**\n * Использовать Portal для рендеринга выпадающего списка.\n */\n forceDropdownPortal?: boolean;\n /**\n * Тип отображения компонента.\n */\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию.\n */\n noMaxHeight?: boolean;\n /**\n * Передает атрибут `data-testid` для элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n /**\n * Передает атрибут `data-testid` для нативного элемента `select`.\n */\n nativeSelectTestId?: string;\n /**\n * Обработчик события `keyDown` в поле ввода.\n */\n onInputKeyDown?: (e: React.KeyboardEvent, isOpen: boolean) => void;\n /**\n * Включает режим в котором выбранное значение `CustomSelect` читается скринридерами корректно.\n * В данном режиме введенное в поле ввода значение не сбрасывается при потере фокуса.\n */\n accessible?: boolean /* TODO [>=v8] включить по умолчанию */;\n /**\n * Текстовая метка для индикации процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Список опций загружается...\"`.\n */\n fetchingInProgressLabel?: string;\n /**\n * Текстовая метка для индикации завершения процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Загружено опций: ${options.length}\"`.\n */\n fetchingCompletedLabel?: string | ((optionsCount: number) => string);\n}\n\n/**\n * @see https://vkui.io/components/custom-select\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n 'onInputChange': onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n searchable = false,\n 'renderOption': renderOptionProp = defaultRenderOptionFn,\n 'options': options,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n 'icon': iconProp,\n ClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n 'aria-labelledby': ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n 'onInputKeyDown': onInputKeyDownProp,\n readOnly,\n accessible = false,\n fetchingInProgressLabel,\n fetchingCompletedLabel,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(options);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const selectElRef = useExternRef(getRef);\n const selectInputRef = useExternRef(getSelectInputRef);\n\n const propsValue = React.useMemo<SelectValue | undefined>(() => {\n if (props.value === undefined) {\n return undefined;\n }\n return getOptionByValue(options, props.value)?.value ?? null;\n }, [options, props.value]);\n\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n\n const {\n nativeSelectValue,\n setNativeSelectValue,\n selectedOptionValue,\n setSelectedOptionValue,\n onNativeSelectChange,\n } = useSelectedOptionController({\n value: propsValue,\n defaultValue,\n isControlledOutside,\n allowClearButton,\n onChange,\n });\n\n const selected = React.useMemo(\n () => options.find((option) => option.value === selectedOptionValue),\n [options, selectedOptionValue],\n );\n\n const { inputValue, onInputChange, resetInputValue, resetInputValueBySelectedOption } =\n useInputValueController({\n options,\n accessible,\n selectedValue: selectedOptionValue,\n onInputChange: onInputChangeProp,\n });\n\n const filteredOptions = React.useMemo(\n () => filter(options, searchable ? inputValue : '', filterFn),\n [filterFn, inputValue, options, searchable],\n );\n\n const { scrollToElement, optionsWrapperRef, scrollBoxRef } = useScrollListController();\n\n const {\n focusedOptionValue,\n setFocusedOptionValue,\n resetFocusedOption,\n focusOptionByIndex,\n focusOption,\n selectFocusedValue,\n } = useFocusedOptionController({\n selectedOptionValue,\n filteredOptions,\n scrollToElement,\n });\n\n const scrollToSelectedOption = () => {\n scrollToElement(findSelectedIndex(filteredOptions, selectedOptionValue), true);\n };\n\n const { opened, open, close, toggleOpened } = useDropdownOpenedController({\n onOpen: callMultiple(selectFocusedValue, onOpen),\n onOpened: scrollToSelectedOption,\n onClose,\n onClosed: accessible ? resetInputValueBySelectedOption : resetInputValue,\n });\n\n React.useEffect(\n function updateOptionsValue() {\n const value =\n propsValue !== undefined\n ? propsValue\n : remapFromNativeValueToSelectValue(nativeSelectValue);\n setSelectedOptionValue(value);\n setFocusedOptionValue(value);\n },\n [propsValue, nativeSelectValue, setFocusedOptionValue, setSelectedOptionValue],\n );\n\n React.useEffect(\n function syncIsControlledState() {\n setIsControlledOutside((oldIsControlled) => {\n const newIsControlled = propsValue !== undefined;\n checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);\n return newIsControlled;\n });\n },\n [propsValue],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (\n filteredOptions.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE)\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const selectOption = React.useCallback(\n (value: Exclude<SelectValue, null>) => {\n setNativeSelectValue(value ?? NOT_SELECTED.NATIVE);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside && propsValue !== nativeSelectValue && nativeSelectValue === value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, setNativeSelectValue, isControlledOutside, propsValue, nativeSelectValue, selectElRef],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionValue === null) {\n return;\n }\n\n selectOption(focusedOptionValue);\n }, [focusedOptionValue, selectOption]);\n\n const onInputKeyDown = useInputKeyboardController({\n opened,\n open,\n close,\n resetFocusedOption,\n selectFocused,\n focusOption,\n scrollBoxRef,\n onInputKeyDown: onInputKeyDownProp,\n });\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\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 = filteredOptions[index];\n\n if (option && !option.disabled) {\n selectOption(option.value);\n }\n },\n [filteredOptions, selectOption],\n );\n\n const lastMousePositionRef = React.useRef<MousePosition>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n if (isMousePositionChanged(e, lastMousePositionRef.current)) {\n focusOptionByIndex(index, false);\n }\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = option.value === focusedOptionValue;\n const selected = option.value === selectedOptionValue;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: preventDefault,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n ...option,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionValue,\n selectedOptionValue,\n renderOptionProp,\n handleOptionClick,\n popupAriaId,\n focusOptionOnMouseMove,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n filteredOptions.length > 0 ? (\n <div ref={optionsWrapperRef}>{filteredOptions.map(renderOption)}</div>\n ) : (\n <Footnote className={styles.empty}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, filteredOptions, optionsWrapperRef, renderDropdown, renderOption]);\n\n const afterItems = useAfterItems({\n value: propsValue,\n nativeSelectValue,\n isControlledOutside,\n opened,\n allowClearButton,\n ClearButton,\n onClearButtonClick: () => {\n setNativeSelectValue(NOT_SELECTED.NATIVE);\n resetInputValue();\n selectInputRef.current && selectInputRef.current.focus();\n },\n clearButtonTestId,\n disabled: restProps.disabled,\n readOnly,\n icon: iconProp,\n });\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n selectInputRef.current.focus();\n }\n }\n },\n [document, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantId = focusedOptionValue !== null ? focusedOptionValue : undefined;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-expanded': opened,\n 'aria-activedescendant':\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const resetOptionFocusOnMouseLeave = React.useCallback(\n (event: React.MouseEvent) => {\n // В Хроме eсли мышка пользователя находится над инпутом селекта,\n // и он с клавиатуры открывает опции, причём одна из опций\n // уже выбрана, то видно, как выбранная опция получает фокус,\n // но потом сразу же его теряет.\n // Связано это с тем, что в этот момент вызывается onMouseLeave, на который у нас\n // завязан сброс состония фокуса у опции. По хорошему фокус должен оставаться.\n // Нам не интересен вызов onMouseLeave если мышка при этом не двигалась.\n if (isMousePositionChanged(event, lastMousePositionRef.current)) {\n resetFocusedOption();\n }\n },\n [resetFocusedOption],\n );\n\n return (\n <div\n className={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n onMouseMove={function updateLastMousePosition(e) {\n lastMousePositionRef.current = { x: e.clientX, y: e.clientY };\n }}\n >\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={readOnly || !searchable}\n fetching={fetching}\n searchable={searchable}\n accessible={accessible}\n value={inputValue}\n onKeyDown={!readOnly ? onInputKeyDown : undefined}\n onChange={onInputChange}\n onClick={!readOnly ? toggleOpened : undefined}\n before={before}\n after={afterItems}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n\n <FetchingStatus\n fetching={fetching}\n options={filteredOptions}\n fetchingInProgressLabel={fetchingInProgressLabel}\n fetchingCompletedLabel={fetchingCompletedLabel}\n />\n <select\n tabIndex={-1}\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles.control}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && (\n <option key={NOT_SELECTED.NATIVE} value={NOT_SELECTED.NATIVE} />\n )}\n {options.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetOptionFocusOnMouseLeave}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","getRequiredValueByKey","useAdaptivity","useExternRef","callMultiple","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","preventDefault","CustomSelectDropdown","CustomSelectOption","NOT_SELECTED","remapFromNativeValueToSelectValue","Footnote","VisuallyHidden","CustomSelectInput","checkMixControlledAndUncontrolledState","checkOptionsValueType","filter","findSelectedIndex","getOptionByValue","useAfterItems","useDropdownOpenedController","useFocusedOptionController","useInputKeyboardController","useInputValueController","useScrollListController","useSelectedOptionController","sizeYClassNames","none","compact","defaultRenderOptionFn","option","props","isMousePositionChanged","event","prevPosition","Math","abs","x","clientX","y","clientY","FETCH_STATUS_RESET_DELAY","FetchingStatus","fetching","options","fetchingInProgressLabel","fetchingCompletedLabel","length","status","setStatus","useState","content","loaded","updateStatus","setTimeout","aria-live","CustomSelect","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","renderDropdown","onOpen","onClose","forceDropdownPortal","selectType","searchable","renderOptionProp","emptyText","filterFn","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","onInputKeyDownProp","readOnly","accessible","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","selectElRef","selectInputRef","propsValue","useMemo","value","undefined","isControlledOutside","setIsControlledOutside","popperPlacement","setPopperPlacement","nativeSelectValue","setNativeSelectValue","selectedOptionValue","setSelectedOptionValue","onNativeSelectChange","selected","find","inputValue","onInputChange","resetInputValue","resetInputValueBySelectedOption","selectedValue","filteredOptions","scrollToElement","optionsWrapperRef","scrollBoxRef","focusedOptionValue","setFocusedOptionValue","resetFocusedOption","focusOptionByIndex","focusOption","selectFocusedValue","scrollToSelectedOption","opened","open","close","toggleOpened","onOpened","onClosed","useEffect","updateOptionsValue","syncIsControlledState","oldIsControlled","newIsControlled","some","NATIVE","Event","bubbles","current","dispatchEvent","openedClassNames","includes","selectOption","useCallback","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","onInputKeyDown","onBlur","onFocus","handleOptionClick","e","index","Array","prototype","indexOf","call","currentTarget","parentNode","disabled","lastMousePositionRef","focusOptionOnMouseMove","popupAriaId","useId","renderOption","hovered","Fragment","label","onClick","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","ref","map","afterItems","onClearButtonClick","focus","icon","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","target","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantId","selectInputAriaProps","resetOptionFocusOnMouseLeave","updateLastMousePosition","autoComplete","autoCapitalize","autoCorrect","spellCheck","onKeyDown","after","select","tabIndex","aria-hidden","data-testid","item","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Touch.d.ts","sourceRoot":"","sources":["../../../src/components/Touch/Touch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEpF,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkC5D,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C;;OAEG;IACH,aAAa,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;AAE7D,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAExE,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,UAAU,CAAC,WAAW,CAAC,EACvB,YAAY;IACd;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC;;OAEG;IACH,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC;;OAEG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC;;OAEG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,IAAI,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IAEb;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,qOAqBnB,UAAU,
|
|
1
|
+
{"version":3,"file":"Touch.d.ts","sourceRoot":"","sources":["../../../src/components/Touch/Touch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEpF,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkC5D,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C;;OAEG;IACH,aAAa,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;AAE7D,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAExE,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,UAAU,CAAC,WAAW,CAAC,EACvB,YAAY;IACd;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC;;OAEG;IACH,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC;;OAEG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC;;OAEG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,IAAI,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IAEb;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,qOAqBnB,UAAU,4CA8OZ,CAAC"}
|
|
@@ -46,6 +46,9 @@ import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.j
|
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
React.useEffect(()=>cleanupTargetNativeGestureEvents, []);
|
|
49
|
+
const isTouchEvent = (event)=>{
|
|
50
|
+
return event.type.startsWith('touch');
|
|
51
|
+
};
|
|
49
52
|
/**
|
|
50
53
|
* Note: используем `useStableCallback()`, чтобы не терялась область видимости `onEnd`/`onEndX`/`onEndY`.
|
|
51
54
|
*/ const handleNativePointerUp = useStableCallback((event)=>{
|
|
@@ -60,7 +63,7 @@ import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.j
|
|
|
60
63
|
onEndY
|
|
61
64
|
], stopPropagation);
|
|
62
65
|
}
|
|
63
|
-
if (
|
|
66
|
+
if (isTouchEvent(event)) {
|
|
64
67
|
// https://github.com/VKCOM/VKUI/issues/4414
|
|
65
68
|
// если тач-устройство и был зафиксирован touchmove,
|
|
66
69
|
// то событие клика не вызывается
|
|
@@ -122,6 +125,10 @@ import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.j
|
|
|
122
125
|
}
|
|
123
126
|
});
|
|
124
127
|
const handlePointerDown = useStableCallback((event)=>{
|
|
128
|
+
// Если touchstart сэмулировало mousedown, то заканчиваем обработку
|
|
129
|
+
if (gestureRef.current !== null) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
125
132
|
const nativeEvent = 'nativeEvent' in event ? event.nativeEvent : event;
|
|
126
133
|
gestureRef.current = initGesture(coordX(nativeEvent), coordY(nativeEvent));
|
|
127
134
|
const shouldCallDirectionHandlerOnlyIsSlide = false;
|
|
@@ -136,7 +143,7 @@ import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.j
|
|
|
136
143
|
};
|
|
137
144
|
// FIXME: заменить touch/mouse-события ниже на pointer-события после того, как бразуеры из
|
|
138
145
|
// .browserslistrc начнут поддерживать его (см. https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events#browser_compatibility).
|
|
139
|
-
if (
|
|
146
|
+
if (isTouchEvent(nativeEvent)) {
|
|
140
147
|
if (isHTMLElement(event.target) || isSVGElement(event.target)) {
|
|
141
148
|
// Тач-события не всплывают, поэтому навешиваем события на целевой элемент
|
|
142
149
|
// см. #235, #1968, https://stackoverflow.com/a/45760014
|
|
@@ -219,9 +226,9 @@ import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.j
|
|
|
219
226
|
// onLeave
|
|
220
227
|
onPointerLeave: usePointerHover ? handlePointerLeave : undefined,
|
|
221
228
|
onMouseLeave: !usePointerHover ? handlePointerLeave : undefined,
|
|
222
|
-
// handlePointerDown
|
|
223
|
-
onMouseDownCapture:
|
|
224
|
-
onMouseDown: !
|
|
229
|
+
// handlePointerDown(onTouchStart устанавливается отдельно через initializeNativeTouchEventStartWithPassiveFalse)
|
|
230
|
+
onMouseDownCapture: useCapture ? handlePointerDown : undefined,
|
|
231
|
+
onMouseDown: !useCapture ? handlePointerDown : undefined
|
|
225
232
|
}));
|
|
226
233
|
};
|
|
227
234
|
function initGesture(startX, startY) {
|