@vkontakte/vkui 7.3.2 → 7.3.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 +1 -1
- package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -1
- package/dist/components/CarouselBase/CarouselBase.js +5 -1
- package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/components/CarouselBase/ScrollArrows.d.ts +2 -2
- package/dist/components/CarouselBase/ScrollArrows.d.ts.map +1 -1
- package/dist/components/CarouselBase/ScrollArrows.js +5 -3
- package/dist/components/CarouselBase/ScrollArrows.js.map +1 -1
- package/dist/components/CarouselBase/types.d.ts +7 -2
- package/dist/components/CarouselBase/types.d.ts.map +1 -1
- package/dist/components/CarouselBase/types.js.map +1 -1
- package/dist/components/ChipsInput/useChipsInput.js +1 -1
- package/dist/components/ChipsInput/useChipsInput.js.map +1 -1
- package/dist/components/ContentBadge/ContentBadge.d.ts +6 -2
- package/dist/components/ContentBadge/ContentBadge.d.ts.map +1 -1
- package/dist/components/ContentBadge/ContentBadge.js +4 -2
- package/dist/components/ContentBadge/ContentBadge.js.map +1 -1
- package/dist/components/ContentBadge/ContentBadgeIconSlot.d.ts +5 -0
- package/dist/components/ContentBadge/ContentBadgeIconSlot.d.ts.map +1 -0
- package/dist/components/ContentBadge/{ContentBadgeSlotIcon.js → ContentBadgeIconSlot.js} +2 -2
- package/dist/components/ContentBadge/ContentBadgeIconSlot.js.map +1 -0
- package/dist/components/FormItem/FormItem.d.ts.map +1 -1
- package/dist/components/FormItem/FormItem.js +4 -2
- package/dist/components/FormItem/FormItem.js.map +1 -1
- package/dist/components/FormLayoutGroup/FormLayoutGroup.d.ts +1 -1
- package/dist/components/FormLayoutGroup/FormLayoutGroup.d.ts.map +1 -1
- package/dist/components/FormLayoutGroup/FormLayoutGroup.js +6 -3
- package/dist/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/components/Search/Search.d.ts +2 -2
- package/dist/components/Search/Search.d.ts.map +1 -1
- package/dist/components/Search/Search.js.map +1 -1
- package/dist/components/Spinner/icons.d.ts.map +1 -1
- package/dist/components/Spinner/icons.js +7 -0
- package/dist/components/Spinner/icons.js.map +1 -1
- package/dist/components/Touch/Touch.d.ts.map +1 -1
- package/dist/components/Touch/Touch.js +27 -7
- 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 +3 -1
- package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/cssm/components/CarouselBase/ScrollArrows.js +5 -3
- package/dist/cssm/components/CarouselBase/ScrollArrows.js.map +1 -1
- package/dist/cssm/components/CarouselBase/types.js.map +1 -1
- package/dist/cssm/components/ChipsInput/useChipsInput.js +4 -1
- package/dist/cssm/components/ChipsInput/useChipsInput.js.map +1 -1
- package/dist/cssm/components/ContentBadge/ContentBadge.js +4 -2
- package/dist/cssm/components/ContentBadge/ContentBadge.js.map +1 -1
- package/dist/cssm/components/ContentBadge/{ContentBadgeSlotIcon.js → ContentBadgeIconSlot.js} +2 -2
- package/dist/cssm/components/ContentBadge/ContentBadgeIconSlot.js.map +1 -0
- package/dist/cssm/components/FormItem/FormItem.js +2 -1
- package/dist/cssm/components/FormItem/FormItem.js.map +1 -1
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js +3 -1
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/cssm/components/Search/Search.js.map +1 -1
- package/dist/cssm/components/Spinner/icons.js +7 -0
- package/dist/cssm/components/Spinner/icons.js.map +1 -1
- package/dist/cssm/components/Touch/Touch.js +27 -7
- package/dist/cssm/components/Touch/Touch.js.map +1 -1
- package/dist/cssm/components/WriteBar/WriteBar.module.css +7 -0
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +1 -1
- package/src/components/CarouselBase/CarouselBase.tsx +4 -0
- package/src/components/CarouselBase/ScrollArrows.tsx +8 -1
- package/src/components/CarouselBase/types.ts +7 -2
- package/src/components/ChipsInput/useChipsInput.ts +1 -1
- package/src/components/ContentBadge/ContentBadge.tsx +9 -3
- package/src/components/ContentBadge/{ContentBadgeSlotIcon.tsx → ContentBadgeIconSlot.tsx} +3 -3
- package/src/components/FormItem/FormItem.tsx +2 -0
- package/src/components/FormLayoutGroup/FormLayoutGroup.tsx +3 -0
- package/src/components/Search/Search.tsx +3 -3
- package/src/components/Spinner/icons.tsx +8 -4
- package/src/components/Touch/Touch.tsx +70 -52
- package/src/components/WriteBar/WriteBar.module.css +7 -0
- package/src/components/WriteBar/WriteBar.module.css.d.ts.map +1 -1
- package/dist/components/ContentBadge/ContentBadgeSlotIcon.d.ts +0 -4
- package/dist/components/ContentBadge/ContentBadgeSlotIcon.d.ts.map +0 -1
- package/dist/components/ContentBadge/ContentBadgeSlotIcon.js.map +0 -1
- package/dist/cssm/components/ContentBadge/ContentBadgeSlotIcon.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { type BaseGalleryProps } from './types';
|
|
3
|
-
export declare const CarouselBase: ({ bullets, getRootRef, children, slideWidth, slideIndex, dragDisabled, resizeSource, onDragStart, onDragEnd, onChange, onPrevClick, onNextClick, align, showArrows, getRef, arrowSize, arrowAreaHeight, slideTestId, bulletTestId, nextArrowTestId, prevArrowTestId, looped, ...restProps }: BaseGalleryProps) => React.ReactNode;
|
|
3
|
+
export declare const 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 }: BaseGalleryProps) => React.ReactNode;
|
|
4
4
|
//# sourceMappingURL=CarouselBase.d.ts.map
|
|
@@ -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,
|
|
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,SAkf3B,CAAC"}
|
|
@@ -22,7 +22,7 @@ import { calcMax, calcMin, calculateIndent, getLoopPoints, getTargetIndex, isBig
|
|
|
22
22
|
import { useSlideAnimation } from "./hooks.js";
|
|
23
23
|
const warn = warnOnce('Gallery');
|
|
24
24
|
export const CarouselBase = (_param)=>{
|
|
25
|
-
var { bullets = false, getRootRef, children, slideWidth = '100%', slideIndex = 0, dragDisabled = false, resizeSource = 'window', onDragStart, onDragEnd, onChange, onPrevClick, onNextClick, align = 'left', showArrows, getRef, arrowSize, arrowAreaHeight, slideTestId, bulletTestId, nextArrowTestId, prevArrowTestId, looped = false } = _param, restProps = _object_without_properties(_param, [
|
|
25
|
+
var { bullets = false, getRootRef, children, slideWidth = '100%', slideIndex = 0, dragDisabled = false, resizeSource = 'window', onDragStart, onDragEnd, onChange, onPrevClick, onNextClick, align = 'left', showArrows, getRef, arrowSize, arrowAreaHeight, arrowNextLabel, arrowPrevLabel, slideTestId, bulletTestId, nextArrowTestId, prevArrowTestId, looped = false } = _param, restProps = _object_without_properties(_param, [
|
|
26
26
|
"bullets",
|
|
27
27
|
"getRootRef",
|
|
28
28
|
"children",
|
|
@@ -40,6 +40,8 @@ export const CarouselBase = (_param)=>{
|
|
|
40
40
|
"getRef",
|
|
41
41
|
"arrowSize",
|
|
42
42
|
"arrowAreaHeight",
|
|
43
|
+
"arrowNextLabel",
|
|
44
|
+
"arrowPrevLabel",
|
|
43
45
|
"slideTestId",
|
|
44
46
|
"bulletTestId",
|
|
45
47
|
"nextArrowTestId",
|
|
@@ -420,6 +422,8 @@ export const CarouselBase = (_param)=>{
|
|
|
420
422
|
showArrows: showArrows,
|
|
421
423
|
arrowSize: arrowSize,
|
|
422
424
|
arrowAreaHeight: arrowAreaHeight,
|
|
425
|
+
arrowPrevLabel: arrowPrevLabel,
|
|
426
|
+
arrowNextLabel: arrowNextLabel,
|
|
423
427
|
prevArrowTestId: prevArrowTestId,
|
|
424
428
|
nextArrowTestId: nextArrowTestId
|
|
425
429
|
})
|
|
@@ -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 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 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","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 { 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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"}
|
|
@@ -11,13 +11,13 @@ export interface ScrollArrowsTestIds {
|
|
|
11
11
|
*/
|
|
12
12
|
prevArrowTestId?: string;
|
|
13
13
|
}
|
|
14
|
-
interface ScrollArrowsProps extends Pick<BaseGalleryProps, 'showArrows' | 'arrowSize' | 'arrowAreaHeight'>, ScrollArrowsTestIds {
|
|
14
|
+
interface ScrollArrowsProps extends Pick<BaseGalleryProps, 'showArrows' | 'arrowSize' | 'arrowAreaHeight' | 'arrowPrevLabel' | 'arrowNextLabel'>, ScrollArrowsTestIds {
|
|
15
15
|
hasPointer?: boolean;
|
|
16
16
|
canSlideLeft: boolean;
|
|
17
17
|
canSlideRight: boolean;
|
|
18
18
|
onSlideLeft: (e: React.MouseEvent) => void;
|
|
19
19
|
onSlideRight: (e: React.MouseEvent) => void;
|
|
20
20
|
}
|
|
21
|
-
export declare const ScrollArrows: ({ hasPointer, canSlideLeft, canSlideRight, onSlideRight, onSlideLeft, showArrows, arrowSize, arrowAreaHeight, nextArrowTestId, prevArrowTestId, }: ScrollArrowsProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
21
|
+
export declare const ScrollArrows: ({ hasPointer, canSlideLeft, canSlideRight, onSlideRight, onSlideLeft, showArrows, arrowSize, arrowAreaHeight, arrowPrevLabel, arrowNextLabel, nextArrowTestId, prevArrowTestId, }: ScrollArrowsProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
22
22
|
export {};
|
|
23
23
|
//# sourceMappingURL=ScrollArrows.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollArrows.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/ScrollArrows.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAQhD,eAAO,MAAM,iBAAiB,GAC5B,MAAM,OAAO,GAAG,KAAK,EACrB,iBAAiB,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,WAOzE,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,iBACR,SAAQ,IAAI,
|
|
1
|
+
{"version":3,"file":"ScrollArrows.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/ScrollArrows.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAQhD,eAAO,MAAM,iBAAiB,GAC5B,MAAM,OAAO,GAAG,KAAK,EACrB,iBAAiB,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,WAOzE,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,iBACR,SAAQ,IAAI,CACR,gBAAgB,EAChB,YAAY,GAAG,WAAW,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,gBAAgB,CACrF,EACD,mBAAmB;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC3C,YAAY,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,YAAY,GAAI,mLAa1B,iBAAiB,mDAyBnB,CAAC"}
|
|
@@ -10,7 +10,7 @@ const stylesArrowAreaHeight = {
|
|
|
10
10
|
export const getArrowClassName = (side, arrowAreaHeight)=>{
|
|
11
11
|
return classNames("vkuiCarouselBase__arrow", side === 'start' ? "vkuiCarouselBase__arrowStart" : "vkuiCarouselBase__arrowEnd", stylesArrowAreaHeight[arrowAreaHeight]);
|
|
12
12
|
};
|
|
13
|
-
export const ScrollArrows = ({ hasPointer, canSlideLeft, canSlideRight, onSlideRight, onSlideLeft, showArrows = false, arrowSize = 'm', arrowAreaHeight = 'stretch', nextArrowTestId, prevArrowTestId })=>{
|
|
13
|
+
export const ScrollArrows = ({ hasPointer, canSlideLeft, canSlideRight, onSlideRight, onSlideLeft, showArrows = false, arrowSize = 'm', arrowAreaHeight = 'stretch', arrowPrevLabel, arrowNextLabel, nextArrowTestId, prevArrowTestId })=>{
|
|
14
14
|
return showArrows && hasPointer ? /*#__PURE__*/ _jsxs(_Fragment, {
|
|
15
15
|
children: [
|
|
16
16
|
canSlideLeft && /*#__PURE__*/ _jsx(ScrollArrow, {
|
|
@@ -18,14 +18,16 @@ export const ScrollArrows = ({ hasPointer, canSlideLeft, canSlideRight, onSlideR
|
|
|
18
18
|
direction: "left",
|
|
19
19
|
onClick: onSlideLeft,
|
|
20
20
|
size: arrowSize,
|
|
21
|
-
"data-testid": prevArrowTestId
|
|
21
|
+
"data-testid": prevArrowTestId,
|
|
22
|
+
label: arrowPrevLabel
|
|
22
23
|
}),
|
|
23
24
|
canSlideRight && /*#__PURE__*/ _jsx(ScrollArrow, {
|
|
24
25
|
className: getArrowClassName('end', arrowAreaHeight),
|
|
25
26
|
direction: "right",
|
|
26
27
|
onClick: onSlideRight,
|
|
27
28
|
size: arrowSize,
|
|
28
|
-
"data-testid": nextArrowTestId
|
|
29
|
+
"data-testid": nextArrowTestId,
|
|
30
|
+
label: arrowNextLabel
|
|
29
31
|
})
|
|
30
32
|
]
|
|
31
33
|
}) : null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CarouselBase/ScrollArrows.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport { type BaseGalleryProps } from './types';\nimport styles from './CarouselBase.module.css';\n\nconst stylesArrowAreaHeight = {\n stretch: styles.arrowAreaStretch,\n fit: styles.arrowAreaFit,\n};\n\nexport const getArrowClassName = (\n side: 'start' | 'end',\n arrowAreaHeight: Exclude<BaseGalleryProps['arrowAreaHeight'], undefined>,\n) => {\n return classNames(\n styles.arrow,\n side === 'start' ? styles.arrowStart : styles.arrowEnd,\n stylesArrowAreaHeight[arrowAreaHeight],\n );\n};\n\nexport interface ScrollArrowsTestIds {\n /**\n * Передает атрибут `data-testid` для кнопки перехода к следующему слайду.\n */\n nextArrowTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки перехода к предыдущему слайду.\n */\n prevArrowTestId?: string;\n}\n\ninterface ScrollArrowsProps\n extends Pick
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CarouselBase/ScrollArrows.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport { type BaseGalleryProps } from './types';\nimport styles from './CarouselBase.module.css';\n\nconst stylesArrowAreaHeight = {\n stretch: styles.arrowAreaStretch,\n fit: styles.arrowAreaFit,\n};\n\nexport const getArrowClassName = (\n side: 'start' | 'end',\n arrowAreaHeight: Exclude<BaseGalleryProps['arrowAreaHeight'], undefined>,\n) => {\n return classNames(\n styles.arrow,\n side === 'start' ? styles.arrowStart : styles.arrowEnd,\n stylesArrowAreaHeight[arrowAreaHeight],\n );\n};\n\nexport interface ScrollArrowsTestIds {\n /**\n * Передает атрибут `data-testid` для кнопки перехода к следующему слайду.\n */\n nextArrowTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки перехода к предыдущему слайду.\n */\n prevArrowTestId?: string;\n}\n\ninterface ScrollArrowsProps\n extends Pick<\n BaseGalleryProps,\n 'showArrows' | 'arrowSize' | 'arrowAreaHeight' | 'arrowPrevLabel' | 'arrowNextLabel'\n >,\n ScrollArrowsTestIds {\n hasPointer?: boolean;\n canSlideLeft: boolean;\n canSlideRight: boolean;\n onSlideLeft: (e: React.MouseEvent) => void;\n onSlideRight: (e: React.MouseEvent) => void;\n}\n\nexport const ScrollArrows = ({\n hasPointer,\n canSlideLeft,\n canSlideRight,\n onSlideRight,\n onSlideLeft,\n showArrows = false,\n arrowSize = 'm',\n arrowAreaHeight = 'stretch',\n arrowPrevLabel,\n arrowNextLabel,\n nextArrowTestId,\n prevArrowTestId,\n}: ScrollArrowsProps) => {\n return showArrows && hasPointer ? (\n <>\n {canSlideLeft && (\n <ScrollArrow\n className={getArrowClassName('start', arrowAreaHeight)}\n direction=\"left\"\n onClick={onSlideLeft}\n size={arrowSize}\n data-testid={prevArrowTestId}\n label={arrowPrevLabel}\n />\n )}\n {canSlideRight && (\n <ScrollArrow\n className={getArrowClassName('end', arrowAreaHeight)}\n direction=\"right\"\n onClick={onSlideRight}\n size={arrowSize}\n data-testid={nextArrowTestId}\n label={arrowNextLabel}\n />\n )}\n </>\n ) : null;\n};\n"],"names":["React","classNames","ScrollArrow","stylesArrowAreaHeight","stretch","fit","getArrowClassName","side","arrowAreaHeight","ScrollArrows","hasPointer","canSlideLeft","canSlideRight","onSlideRight","onSlideLeft","showArrows","arrowSize","arrowPrevLabel","arrowNextLabel","nextArrowTestId","prevArrowTestId","className","direction","onClick","size","data-testid","label"],"mappings":"AAAA;;AACA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,WAAW,QAAQ,gCAA6B;AAIzD,MAAMC,wBAAwB;IAC5BC,OAAO;IACPC,GAAG;AACL;AAEA,OAAO,MAAMC,oBAAoB,CAC/BC,MACAC;IAEA,OAAOP,sCAELM,SAAS,yEACTJ,qBAAqB,CAACK,gBAAgB;AAE1C,EAAE;AA0BF,OAAO,MAAMC,eAAe,CAAC,EAC3BC,UAAU,EACVC,YAAY,EACZC,aAAa,EACbC,YAAY,EACZC,WAAW,EACXC,aAAa,KAAK,EAClBC,YAAY,GAAG,EACfR,kBAAkB,SAAS,EAC3BS,cAAc,EACdC,cAAc,EACdC,eAAe,EACfC,eAAe,EACG;IAClB,OAAOL,cAAcL,2BACnB;;YACGC,8BACC,KAACT;gBACCmB,WAAWf,kBAAkB,SAASE;gBACtCc,WAAU;gBACVC,SAAST;gBACTU,MAAMR;gBACNS,eAAaL;gBACbM,OAAOT;;YAGVL,+BACC,KAACV;gBACCmB,WAAWf,kBAAkB,OAAOE;gBACpCc,WAAU;gBACVC,SAASV;gBACTW,MAAMR;gBACNS,eAAaN;gBACbO,OAAOR;;;SAIX;AACN,EAAE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as React from 'react';
|
|
2
|
-
import type { HasAlign, HasRef, HTMLAttributesWithRootRef } from '../../types';
|
|
2
|
+
import type { HasAlign, HasRef, HTMLAttributesWithRootRef, LiteralUnion } from '../../types';
|
|
3
3
|
import type { ScrollArrowProps } from '../ScrollArrow/ScrollArrow';
|
|
4
4
|
import type { CustomTouchEvent, CustomTouchEventHandler } from '../Touch/Touch';
|
|
5
5
|
import { type BulletsTestIds } from './Bullets';
|
|
@@ -74,7 +74,12 @@ export interface SlidesManagerState {
|
|
|
74
74
|
layerWidth: number;
|
|
75
75
|
}
|
|
76
76
|
export interface BaseGalleryProps extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'onDragStart' | 'onDragEnd'>, HasAlign, HasRef<HTMLElement>, BulletsTestIds, ScrollArrowsTestIds {
|
|
77
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Размер слайда.
|
|
79
|
+
*
|
|
80
|
+
* Значение `"custom"` используется, если ширина у слайдов разная.
|
|
81
|
+
*/
|
|
82
|
+
slideWidth?: LiteralUnion<'custom', string> | number;
|
|
78
83
|
slideIndex?: number;
|
|
79
84
|
onDragStart?: CustomTouchEventHandler;
|
|
80
85
|
onDragEnd?: (e: CustomTouchEvent, targetIndex: number) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CarouselBase/types.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport type * as React from 'react';\nimport type { HasAlign, HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport type { ScrollArrowProps } from '../ScrollArrow/ScrollArrow';\nimport type { CustomTouchEvent, CustomTouchEventHandler } from '../Touch/Touch';\nimport { type BulletsTestIds } from './Bullets';\nimport { type ScrollArrowsTestIds } from './ScrollArrows';\n\nexport interface GallerySlidesState {\n coordX: number;\n width: number;\n}\n\nexport interface LayoutState {\n containerWidth: number;\n viewportOffsetWidth: number;\n layerWidth: number;\n min?: number;\n max: number;\n slides: GallerySlidesState[];\n isFullyVisible: boolean;\n}\n\nexport interface LoopPoint {\n /**\n * Индекс слайда.\n */\n index: number;\n /**\n * Функция, которая по текущему сдвигу галереи определяет нужный сдвиг слайда.\n */\n target: (this: void, location: number) => void;\n}\n\nexport interface ControlElementsState {\n /**\n * Отвечает за отображение стрелки влево.\n */\n canSlideLeft: boolean;\n /**\n * Отвечает за отображение стрелки вправо.\n */\n canSlideRight: boolean;\n /**\n * Возможность листать слайды drag'ом.\n */\n isDraggable: boolean;\n}\n\nexport interface SlidesManagerState {\n /**\n * Общая ширина всех слайдов.\n */\n contentSize: number;\n /**\n * Массив с пограничными точками слайдов, которые необходимо смещать, чтобы они всегда были в области видимости\n * (пример: для последнего слайда это n-первых слайдов, необходимых для заполнения оставшейся ширины,\n * или для первого слайда это n-последних слайдов при выравнивании по центру).\n */\n loopPoints: LoopPoint[];\n /**\n * Массив с правыми границами слайдов.\n */\n snaps: number[];\n /**\n * Ширина видимой области слайдов.\n */\n viewportOffsetWidth: number;\n /**\n * Массив слайдов с координатой начала слайда и шириной.\n */\n slides: GallerySlidesState[];\n /**\n * Все слайды видимы без скрола.\n */\n isFullyVisible: boolean;\n min: number | null;\n max: number | null;\n containerWidth: number;\n layerWidth: number;\n}\n\nexport interface BaseGalleryProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'onDragStart' | 'onDragEnd'>,\n HasAlign,\n HasRef<HTMLElement>,\n BulletsTestIds,\n ScrollArrowsTestIds {\n slideWidth?: string | number;\n slideIndex?: number;\n onDragStart?: CustomTouchEventHandler;\n onDragEnd?: (e: CustomTouchEvent, targetIndex: number) => void;\n onChange?: (current: number) => void;\n /**\n * Будет вызвано при нажатии на кнопку-стрелку влево.\n */\n onPrevClick?: (event: React.MouseEvent) => void;\n /**\n * Будет вызвано при нажатии на кнопку-стрелку вправо.\n */\n onNextClick?: (event: React.MouseEvent) => void;\n bullets?: 'dark' | 'light' | false;\n /**\n * Позволяет отключить реагирование на тач-события.\n */\n dragDisabled?: boolean;\n showArrows?: boolean;\n /**\n * Размер активной зоны стрелок (в пикселях).\n * Определяет область вокруг стрелок, реагирующую на взаимодействие пользователя. В дизайне свойство называется `arrowArea`.\n */\n arrowAreaHeight?: 'stretch' | 'fit';\n hasPointer?: boolean;\n arrowSize?: ScrollArrowProps['size'];\n /**\n * Текст для кнопки-стрелки влево (назад). Делает ее доступной для ассистивных технологий.\n */\n arrowPrevLabel?: string;\n /**\n * Текст для кнопки-стрелки вправо (вперед). Делает ее доступной для ассистивных технологий.\n */\n arrowNextLabel?: string;\n /**\n * Передает атрибут `data-testid` для слайда.\n */\n slideTestId?: (index: number) => string;\n /**\n * Включает зацикленность слайдов.\n */\n looped?: boolean;\n /**\n * Тип источника для отслеживания размера:\n * - `window`: пересчет позиции слайдов будет происходить при изменении размеров `window`\n * - `element`: пересчет позиции слайдов будет происходить при изменении размеров компонента.\n */\n resizeSource?: 'window' | 'element';\n}\n"],"names":[],"mappings":"AAAA,sCAAsC,GAkFtC,
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CarouselBase/types.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport type * as React from 'react';\nimport type { HasAlign, HasRef, HTMLAttributesWithRootRef, LiteralUnion } from '../../types';\nimport type { ScrollArrowProps } from '../ScrollArrow/ScrollArrow';\nimport type { CustomTouchEvent, CustomTouchEventHandler } from '../Touch/Touch';\nimport { type BulletsTestIds } from './Bullets';\nimport { type ScrollArrowsTestIds } from './ScrollArrows';\n\nexport interface GallerySlidesState {\n coordX: number;\n width: number;\n}\n\nexport interface LayoutState {\n containerWidth: number;\n viewportOffsetWidth: number;\n layerWidth: number;\n min?: number;\n max: number;\n slides: GallerySlidesState[];\n isFullyVisible: boolean;\n}\n\nexport interface LoopPoint {\n /**\n * Индекс слайда.\n */\n index: number;\n /**\n * Функция, которая по текущему сдвигу галереи определяет нужный сдвиг слайда.\n */\n target: (this: void, location: number) => void;\n}\n\nexport interface ControlElementsState {\n /**\n * Отвечает за отображение стрелки влево.\n */\n canSlideLeft: boolean;\n /**\n * Отвечает за отображение стрелки вправо.\n */\n canSlideRight: boolean;\n /**\n * Возможность листать слайды drag'ом.\n */\n isDraggable: boolean;\n}\n\nexport interface SlidesManagerState {\n /**\n * Общая ширина всех слайдов.\n */\n contentSize: number;\n /**\n * Массив с пограничными точками слайдов, которые необходимо смещать, чтобы они всегда были в области видимости\n * (пример: для последнего слайда это n-первых слайдов, необходимых для заполнения оставшейся ширины,\n * или для первого слайда это n-последних слайдов при выравнивании по центру).\n */\n loopPoints: LoopPoint[];\n /**\n * Массив с правыми границами слайдов.\n */\n snaps: number[];\n /**\n * Ширина видимой области слайдов.\n */\n viewportOffsetWidth: number;\n /**\n * Массив слайдов с координатой начала слайда и шириной.\n */\n slides: GallerySlidesState[];\n /**\n * Все слайды видимы без скрола.\n */\n isFullyVisible: boolean;\n min: number | null;\n max: number | null;\n containerWidth: number;\n layerWidth: number;\n}\n\nexport interface BaseGalleryProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'onDragStart' | 'onDragEnd'>,\n HasAlign,\n HasRef<HTMLElement>,\n BulletsTestIds,\n ScrollArrowsTestIds {\n /**\n * Размер слайда.\n *\n * Значение `\"custom\"` используется, если ширина у слайдов разная.\n */\n slideWidth?: LiteralUnion<'custom', string> | number;\n slideIndex?: number;\n onDragStart?: CustomTouchEventHandler;\n onDragEnd?: (e: CustomTouchEvent, targetIndex: number) => void;\n onChange?: (current: number) => void;\n /**\n * Будет вызвано при нажатии на кнопку-стрелку влево.\n */\n onPrevClick?: (event: React.MouseEvent) => void;\n /**\n * Будет вызвано при нажатии на кнопку-стрелку вправо.\n */\n onNextClick?: (event: React.MouseEvent) => void;\n bullets?: 'dark' | 'light' | false;\n /**\n * Позволяет отключить реагирование на тач-события.\n */\n dragDisabled?: boolean;\n showArrows?: boolean;\n /**\n * Размер активной зоны стрелок (в пикселях).\n * Определяет область вокруг стрелок, реагирующую на взаимодействие пользователя. В дизайне свойство называется `arrowArea`.\n */\n arrowAreaHeight?: 'stretch' | 'fit';\n hasPointer?: boolean;\n arrowSize?: ScrollArrowProps['size'];\n /**\n * Текст для кнопки-стрелки влево (назад). Делает ее доступной для ассистивных технологий.\n */\n arrowPrevLabel?: string;\n /**\n * Текст для кнопки-стрелки вправо (вперед). Делает ее доступной для ассистивных технологий.\n */\n arrowNextLabel?: string;\n /**\n * Передает атрибут `data-testid` для слайда.\n */\n slideTestId?: (index: number) => string;\n /**\n * Включает зацикленность слайдов.\n */\n looped?: boolean;\n /**\n * Тип источника для отслеживания размера:\n * - `window`: пересчет позиции слайдов будет происходить при изменении размеров `window`\n * - `element`: пересчет позиции слайдов будет происходить при изменении размеров компонента.\n */\n resizeSource?: 'window' | 'element';\n}\n"],"names":[],"mappings":"AAAA,sCAAsC,GAkFtC,WA2DC"}
|
|
@@ -34,7 +34,7 @@ disabled, delimiter })=>{
|
|
|
34
34
|
const isLikeObjectOption = isValueLikeChipOptionObject(option);
|
|
35
35
|
const resolvedOption = isLikeObjectOption ? getNewOptionData(option.value, option.label) : getNewOptionData(option, typeof option === 'string' ? option : '');
|
|
36
36
|
resolvedNextOptionsSet.add(resolvedOption.value);
|
|
37
|
-
return resolvedOption;
|
|
37
|
+
return isLikeObjectOption ? _object_spread({}, option, resolvedOption) : resolvedOption;
|
|
38
38
|
});
|
|
39
39
|
const nextValue = prevValue.filter((option)=>!resolvedNextOptionsSet.has(option.value));
|
|
40
40
|
if (isNewValue) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ChipsInput/useChipsInput.ts"],"sourcesContent":["import * as React from 'react';\nimport { useCustomEnsuredControl, useEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useNativeFormResetListener } from '../../hooks/useNativeFormResetListener';\nimport { simulateReactInput, type SimulateReactInputTargetState } from '../../lib/react';\nimport {\n DEFAULT_INPUT_VALUE,\n DEFAULT_VALUE,\n getNewOptionDataDefault,\n getOptionLabelDefault,\n getOptionValueDefault,\n} from '../ChipsInputBase/constants';\nimport { isValueLikeChipOptionObject } from '../ChipsInputBase/helpers';\nimport type {\n ChipOption,\n ChipOptionLabel,\n ChipOptionValue,\n GetNewOptionData,\n GetOptionLabel,\n GetOptionValue,\n UseChipsInputBaseProps,\n} from '../ChipsInputBase/types';\n\nexport const transformValue = <O extends ChipOption>(\n value: O[],\n getOptionValue: GetOptionValue<O>,\n getOptionLabel: GetOptionLabel<O>,\n): Array<\n O & {\n label: ChipOptionLabel;\n value: ChipOptionValue;\n }\n> =>\n value.map((option) => ({\n ...option,\n label: getOptionLabel(option),\n value: getOptionValue(option),\n }));\n\ninterface ToggleOption<O extends ChipOption> {\n (optionsForAdd: Array<O | string>, isNewValue: true): void;\n (optionsForRemove: Array<O | ChipOptionValue>, isNewValue: false): void;\n}\n\nexport interface UseChipsInputProps<O extends ChipOption = ChipOption>\n extends UseChipsInputBaseProps<O> {\n /**\n * Селектор значения.\n */\n getOptionValue?: GetOptionValue<O>;\n /**\n * Селектор пользовательского представления.\n */\n getOptionLabel?: GetOptionLabel<O>;\n /**\n * Функция для создания новой опции.\n */\n getNewOptionData?: GetNewOptionData<O>;\n}\n\nexport const useChipsInput = <O extends ChipOption>({\n // option\n value: valueProp,\n defaultValue = DEFAULT_VALUE,\n onChange,\n getOptionLabel = getOptionLabelDefault,\n getOptionValue = getOptionValueDefault,\n getNewOptionData = getNewOptionDataDefault,\n\n // input\n inputValue: inputValueProp,\n defaultInputValue = DEFAULT_INPUT_VALUE,\n onInputChange: onInputChangeProp,\n\n // other\n disabled,\n delimiter,\n}: UseChipsInputProps<O>): {\n value: Array<\n O & {\n label: ChipOptionLabel;\n value: ChipOptionValue;\n }\n >;\n addOption: (newValue: O | string) => void;\n addOptionFromInput: (inputValue: string) => void;\n removeOption: (newValue: O | ChipOptionValue) => void;\n clearOptions: () => void;\n inputRef: React.RefObject<(HTMLInputElement & SimulateReactInputTargetState) | null>;\n inputValue: string;\n onInputChange: (e: React.ChangeEvent<HTMLInputElement>, canCreate?: boolean) => any;\n clearInput: () => void;\n} => {\n const [value, setValue] = useCustomEnsuredControl({\n disabled,\n value: valueProp ? transformValue(valueProp, getOptionValue, getOptionLabel) : undefined,\n defaultValue: transformValue(defaultValue, getOptionValue, getOptionLabel),\n onChange,\n });\n\n const inputRef = React.useRef<(HTMLInputElement & SimulateReactInputTargetState) | null>(null);\n const [inputValue, setInputChange] = useEnsuredControl({\n disabled,\n value: inputValueProp,\n defaultValue: defaultInputValue,\n onChange: onInputChangeProp,\n });\n\n const toggleOption: ToggleOption<O> = React.useCallback(\n (nextValuesProp: Array<O | ChipOptionValue>, isNewValue: boolean) => {\n setValue((prevValue) => {\n const resolvedNextOptionsSet = new Set<ChipOptionValue>();\n const resolvedNextOptions = nextValuesProp.map((option) => {\n const isLikeObjectOption = isValueLikeChipOptionObject(option);\n const resolvedOption = isLikeObjectOption\n ? getNewOptionData(option.value, option.label)\n : getNewOptionData(option, typeof option === 'string' ? option : '');\n resolvedNextOptionsSet.add(resolvedOption.value);\n return resolvedOption;\n });\n\n const nextValue = prevValue.filter(\n (option: O) => !resolvedNextOptionsSet.has(option.value),\n );\n\n if (isNewValue) {\n nextValue.push(...resolvedNextOptions);\n }\n\n return nextValue;\n });\n },\n [setValue, getNewOptionData],\n );\n\n const clearInput = React.useCallback(() => {\n /* istanbul ignore if */\n if (!inputRef.current) {\n return;\n }\n simulateReactInput(inputRef.current, '');\n }, [inputRef]);\n\n const addOption = React.useCallback(\n (newValue: O | string) => toggleOption([newValue], true),\n [toggleOption],\n );\n\n const addOptions = React.useCallback(\n (newValues: Array<O | string>) => toggleOption(newValues, true),\n [toggleOption],\n );\n\n const removeOption = React.useCallback(\n (newValue: O | ChipOptionValue) => toggleOption([newValue], false),\n [toggleOption],\n );\n\n const addOptionFromInput = React.useCallback(\n (inputValue: string) => {\n const label = inputValue.trim();\n if (label) {\n addOption(label);\n clearInput();\n }\n },\n [addOption, clearInput],\n );\n\n const reset = React.useCallback(() => {\n setValue(defaultValue);\n }, [defaultValue, setValue]);\n\n const clearOptions = React.useCallback(() => {\n setValue(DEFAULT_VALUE);\n clearInput();\n }, [clearInput, setValue]);\n\n const onInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>, canCreate = true) => {\n const newInputValue = e.target.value;\n if (!delimiter || !newInputValue.includes(delimiter) || !canCreate) {\n setInputChange(e);\n return;\n }\n const values = newInputValue\n .trim()\n .split(delimiter)\n .map((v) => v.trim())\n .filter(Boolean);\n\n e.target.value = '';\n e.currentTarget.value = '';\n setInputChange(e);\n\n addOptions(values);\n },\n [addOptions, delimiter, setInputChange],\n );\n\n useNativeFormResetListener(inputRef, reset);\n\n return {\n value,\n addOption,\n addOptionFromInput,\n removeOption,\n\n inputRef,\n inputValue,\n onInputChange,\n clearInput,\n clearOptions,\n };\n};\n"],"names":["React","useCustomEnsuredControl","useEnsuredControl","useNativeFormResetListener","simulateReactInput","DEFAULT_INPUT_VALUE","DEFAULT_VALUE","getNewOptionDataDefault","getOptionLabelDefault","getOptionValueDefault","isValueLikeChipOptionObject","transformValue","value","getOptionValue","getOptionLabel","map","option","label","useChipsInput","valueProp","defaultValue","onChange","getNewOptionData","inputValue","inputValueProp","defaultInputValue","onInputChange","onInputChangeProp","disabled","delimiter","setValue","undefined","inputRef","useRef","setInputChange","toggleOption","useCallback","nextValuesProp","isNewValue","prevValue","resolvedNextOptionsSet","Set","resolvedNextOptions","isLikeObjectOption","resolvedOption","add","nextValue","filter","has","push","clearInput","current","addOption","newValue","addOptions","newValues","removeOption","addOptionFromInput","trim","reset","clearOptions","e","canCreate","newInputValue","target","includes","values","split","v","Boolean","currentTarget"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ChipsInput/useChipsInput.ts"],"sourcesContent":["import * as React from 'react';\nimport { useCustomEnsuredControl, useEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useNativeFormResetListener } from '../../hooks/useNativeFormResetListener';\nimport { simulateReactInput, type SimulateReactInputTargetState } from '../../lib/react';\nimport {\n DEFAULT_INPUT_VALUE,\n DEFAULT_VALUE,\n getNewOptionDataDefault,\n getOptionLabelDefault,\n getOptionValueDefault,\n} from '../ChipsInputBase/constants';\nimport { isValueLikeChipOptionObject } from '../ChipsInputBase/helpers';\nimport type {\n ChipOption,\n ChipOptionLabel,\n ChipOptionValue,\n GetNewOptionData,\n GetOptionLabel,\n GetOptionValue,\n UseChipsInputBaseProps,\n} from '../ChipsInputBase/types';\n\nexport const transformValue = <O extends ChipOption>(\n value: O[],\n getOptionValue: GetOptionValue<O>,\n getOptionLabel: GetOptionLabel<O>,\n): Array<\n O & {\n label: ChipOptionLabel;\n value: ChipOptionValue;\n }\n> =>\n value.map((option) => ({\n ...option,\n label: getOptionLabel(option),\n value: getOptionValue(option),\n }));\n\ninterface ToggleOption<O extends ChipOption> {\n (optionsForAdd: Array<O | string>, isNewValue: true): void;\n (optionsForRemove: Array<O | ChipOptionValue>, isNewValue: false): void;\n}\n\nexport interface UseChipsInputProps<O extends ChipOption = ChipOption>\n extends UseChipsInputBaseProps<O> {\n /**\n * Селектор значения.\n */\n getOptionValue?: GetOptionValue<O>;\n /**\n * Селектор пользовательского представления.\n */\n getOptionLabel?: GetOptionLabel<O>;\n /**\n * Функция для создания новой опции.\n */\n getNewOptionData?: GetNewOptionData<O>;\n}\n\nexport const useChipsInput = <O extends ChipOption>({\n // option\n value: valueProp,\n defaultValue = DEFAULT_VALUE,\n onChange,\n getOptionLabel = getOptionLabelDefault,\n getOptionValue = getOptionValueDefault,\n getNewOptionData = getNewOptionDataDefault,\n\n // input\n inputValue: inputValueProp,\n defaultInputValue = DEFAULT_INPUT_VALUE,\n onInputChange: onInputChangeProp,\n\n // other\n disabled,\n delimiter,\n}: UseChipsInputProps<O>): {\n value: Array<\n O & {\n label: ChipOptionLabel;\n value: ChipOptionValue;\n }\n >;\n addOption: (newValue: O | string) => void;\n addOptionFromInput: (inputValue: string) => void;\n removeOption: (newValue: O | ChipOptionValue) => void;\n clearOptions: () => void;\n inputRef: React.RefObject<(HTMLInputElement & SimulateReactInputTargetState) | null>;\n inputValue: string;\n onInputChange: (e: React.ChangeEvent<HTMLInputElement>, canCreate?: boolean) => any;\n clearInput: () => void;\n} => {\n const [value, setValue] = useCustomEnsuredControl({\n disabled,\n value: valueProp ? transformValue(valueProp, getOptionValue, getOptionLabel) : undefined,\n defaultValue: transformValue(defaultValue, getOptionValue, getOptionLabel),\n onChange,\n });\n\n const inputRef = React.useRef<(HTMLInputElement & SimulateReactInputTargetState) | null>(null);\n const [inputValue, setInputChange] = useEnsuredControl({\n disabled,\n value: inputValueProp,\n defaultValue: defaultInputValue,\n onChange: onInputChangeProp,\n });\n\n const toggleOption: ToggleOption<O> = React.useCallback(\n (nextValuesProp: Array<O | ChipOptionValue>, isNewValue: boolean) => {\n setValue((prevValue) => {\n const resolvedNextOptionsSet = new Set<ChipOptionValue>();\n const resolvedNextOptions = nextValuesProp.map((option) => {\n const isLikeObjectOption = isValueLikeChipOptionObject(option);\n const resolvedOption = isLikeObjectOption\n ? getNewOptionData(option.value, option.label)\n : getNewOptionData(option, typeof option === 'string' ? option : '');\n resolvedNextOptionsSet.add(resolvedOption.value);\n return isLikeObjectOption ? { ...option, ...resolvedOption } : resolvedOption;\n });\n\n const nextValue = prevValue.filter(\n (option: O) => !resolvedNextOptionsSet.has(option.value),\n );\n\n if (isNewValue) {\n nextValue.push(...resolvedNextOptions);\n }\n\n return nextValue;\n });\n },\n [setValue, getNewOptionData],\n );\n\n const clearInput = React.useCallback(() => {\n /* istanbul ignore if */\n if (!inputRef.current) {\n return;\n }\n simulateReactInput(inputRef.current, '');\n }, [inputRef]);\n\n const addOption = React.useCallback(\n (newValue: O | string) => toggleOption([newValue], true),\n [toggleOption],\n );\n\n const addOptions = React.useCallback(\n (newValues: Array<O | string>) => toggleOption(newValues, true),\n [toggleOption],\n );\n\n const removeOption = React.useCallback(\n (newValue: O | ChipOptionValue) => toggleOption([newValue], false),\n [toggleOption],\n );\n\n const addOptionFromInput = React.useCallback(\n (inputValue: string) => {\n const label = inputValue.trim();\n if (label) {\n addOption(label);\n clearInput();\n }\n },\n [addOption, clearInput],\n );\n\n const reset = React.useCallback(() => {\n setValue(defaultValue);\n }, [defaultValue, setValue]);\n\n const clearOptions = React.useCallback(() => {\n setValue(DEFAULT_VALUE);\n clearInput();\n }, [clearInput, setValue]);\n\n const onInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>, canCreate = true) => {\n const newInputValue = e.target.value;\n if (!delimiter || !newInputValue.includes(delimiter) || !canCreate) {\n setInputChange(e);\n return;\n }\n const values = newInputValue\n .trim()\n .split(delimiter)\n .map((v) => v.trim())\n .filter(Boolean);\n\n e.target.value = '';\n e.currentTarget.value = '';\n setInputChange(e);\n\n addOptions(values);\n },\n [addOptions, delimiter, setInputChange],\n );\n\n useNativeFormResetListener(inputRef, reset);\n\n return {\n value,\n addOption,\n addOptionFromInput,\n removeOption,\n\n inputRef,\n inputValue,\n onInputChange,\n clearInput,\n clearOptions,\n };\n};\n"],"names":["React","useCustomEnsuredControl","useEnsuredControl","useNativeFormResetListener","simulateReactInput","DEFAULT_INPUT_VALUE","DEFAULT_VALUE","getNewOptionDataDefault","getOptionLabelDefault","getOptionValueDefault","isValueLikeChipOptionObject","transformValue","value","getOptionValue","getOptionLabel","map","option","label","useChipsInput","valueProp","defaultValue","onChange","getNewOptionData","inputValue","inputValueProp","defaultInputValue","onInputChange","onInputChangeProp","disabled","delimiter","setValue","undefined","inputRef","useRef","setInputChange","toggleOption","useCallback","nextValuesProp","isNewValue","prevValue","resolvedNextOptionsSet","Set","resolvedNextOptions","isLikeObjectOption","resolvedOption","add","nextValue","filter","has","push","clearInput","current","addOption","newValue","addOptions","newValues","removeOption","addOptionFromInput","trim","reset","clearOptions","e","canCreate","newInputValue","target","includes","values","split","v","Boolean","currentTarget"],"mappings":";;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,uBAAuB,EAAEC,iBAAiB,QAAQ,mCAAgC;AAC3F,SAASC,0BAA0B,QAAQ,4CAAyC;AACpF,SAASC,kBAAkB,QAA4C,2BAAkB;AACzF,SACEC,mBAAmB,EACnBC,aAAa,EACbC,uBAAuB,EACvBC,qBAAqB,EACrBC,qBAAqB,QAChB,iCAA8B;AACrC,SAASC,2BAA2B,QAAQ,+BAA4B;AAWxE,OAAO,MAAMC,iBAAiB,CAC5BC,OACAC,gBACAC,iBAOAF,MAAMG,GAAG,CAAC,CAACC,SAAY,wCAClBA;YACHC,OAAOH,eAAeE;YACtBJ,OAAOC,eAAeG;YACpB;AAuBN,OAAO,MAAME,gBAAgB,CAAuB,EAClD,SAAS;AACTN,OAAOO,SAAS,EAChBC,eAAed,aAAa,EAC5Be,QAAQ,EACRP,iBAAiBN,qBAAqB,EACtCK,iBAAiBJ,qBAAqB,EACtCa,mBAAmBf,uBAAuB,EAE1C,QAAQ;AACRgB,YAAYC,cAAc,EAC1BC,oBAAoBpB,mBAAmB,EACvCqB,eAAeC,iBAAiB,EAEhC,QAAQ;AACRC,QAAQ,EACRC,SAAS,EACa;IAgBtB,MAAM,CAACjB,OAAOkB,SAAS,GAAG7B,wBAAwB;QAChD2B;QACAhB,OAAOO,YAAYR,eAAeQ,WAAWN,gBAAgBC,kBAAkBiB;QAC/EX,cAAcT,eAAeS,cAAcP,gBAAgBC;QAC3DO;IACF;IAEA,MAAMW,WAAWhC,MAAMiC,MAAM,CAA4D;IACzF,MAAM,CAACV,YAAYW,eAAe,GAAGhC,kBAAkB;QACrD0B;QACAhB,OAAOY;QACPJ,cAAcK;QACdJ,UAAUM;IACZ;IAEA,MAAMQ,eAAgCnC,MAAMoC,WAAW,CACrD,CAACC,gBAA4CC;QAC3CR,SAAS,CAACS;YACR,MAAMC,yBAAyB,IAAIC;YACnC,MAAMC,sBAAsBL,eAAetB,GAAG,CAAC,CAACC;gBAC9C,MAAM2B,qBAAqBjC,4BAA4BM;gBACvD,MAAM4B,iBAAiBD,qBACnBrB,iBAAiBN,OAAOJ,KAAK,EAAEI,OAAOC,KAAK,IAC3CK,iBAAiBN,QAAQ,OAAOA,WAAW,WAAWA,SAAS;gBACnEwB,uBAAuBK,GAAG,CAACD,eAAehC,KAAK;gBAC/C,OAAO+B,qBAAqB,mBAAK3B,QAAW4B,kBAAmBA;YACjE;YAEA,MAAME,YAAYP,UAAUQ,MAAM,CAChC,CAAC/B,SAAc,CAACwB,uBAAuBQ,GAAG,CAAChC,OAAOJ,KAAK;YAGzD,IAAI0B,YAAY;gBACdQ,UAAUG,IAAI,IAAIP;YACpB;YAEA,OAAOI;QACT;IACF,GACA;QAAChB;QAAUR;KAAiB;IAG9B,MAAM4B,aAAalD,MAAMoC,WAAW,CAAC;QACnC,sBAAsB,GACtB,IAAI,CAACJ,SAASmB,OAAO,EAAE;YACrB;QACF;QACA/C,mBAAmB4B,SAASmB,OAAO,EAAE;IACvC,GAAG;QAACnB;KAAS;IAEb,MAAMoB,YAAYpD,MAAMoC,WAAW,CACjC,CAACiB,WAAyBlB,aAAa;YAACkB;SAAS,EAAE,OACnD;QAAClB;KAAa;IAGhB,MAAMmB,aAAatD,MAAMoC,WAAW,CAClC,CAACmB,YAAiCpB,aAAaoB,WAAW,OAC1D;QAACpB;KAAa;IAGhB,MAAMqB,eAAexD,MAAMoC,WAAW,CACpC,CAACiB,WAAkClB,aAAa;YAACkB;SAAS,EAAE,QAC5D;QAAClB;KAAa;IAGhB,MAAMsB,qBAAqBzD,MAAMoC,WAAW,CAC1C,CAACb;QACC,MAAMN,QAAQM,WAAWmC,IAAI;QAC7B,IAAIzC,OAAO;YACTmC,UAAUnC;YACViC;QACF;IACF,GACA;QAACE;QAAWF;KAAW;IAGzB,MAAMS,QAAQ3D,MAAMoC,WAAW,CAAC;QAC9BN,SAASV;IACX,GAAG;QAACA;QAAcU;KAAS;IAE3B,MAAM8B,eAAe5D,MAAMoC,WAAW,CAAC;QACrCN,SAASxB;QACT4C;IACF,GAAG;QAACA;QAAYpB;KAAS;IAEzB,MAAMJ,gBAAgB1B,MAAMoC,WAAW,CACrC,CAACyB,GAAwCC,YAAY,IAAI;QACvD,MAAMC,gBAAgBF,EAAEG,MAAM,CAACpD,KAAK;QACpC,IAAI,CAACiB,aAAa,CAACkC,cAAcE,QAAQ,CAACpC,cAAc,CAACiC,WAAW;YAClE5B,eAAe2B;YACf;QACF;QACA,MAAMK,SAASH,cACZL,IAAI,GACJS,KAAK,CAACtC,WACNd,GAAG,CAAC,CAACqD,IAAMA,EAAEV,IAAI,IACjBX,MAAM,CAACsB;QAEVR,EAAEG,MAAM,CAACpD,KAAK,GAAG;QACjBiD,EAAES,aAAa,CAAC1D,KAAK,GAAG;QACxBsB,eAAe2B;QAEfP,WAAWY;IACb,GACA;QAACZ;QAAYzB;QAAWK;KAAe;IAGzC/B,2BAA2B6B,UAAU2B;IAErC,OAAO;QACL/C;QACAwC;QACAK;QACAD;QAEAxB;QACAT;QACAG;QACAwB;QACAU;IACF;AACF,EAAE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import type { HTMLAttributesWithRootRef } from '../../types';
|
|
3
3
|
import type { TypographyProps } from '../Typography/Typography';
|
|
4
|
-
import {
|
|
4
|
+
import { ContentBadgeIconSlot } from './ContentBadgeIconSlot';
|
|
5
5
|
import type { ContentBadgeModeType, ContentBadgeSizeType } from './types';
|
|
6
6
|
export interface ContentBadgeProps extends HTMLAttributesWithRootRef<HTMLDivElement>, Pick<TypographyProps, 'weight'> {
|
|
7
7
|
/**
|
|
@@ -39,6 +39,10 @@ export interface ContentBadgeProps extends HTMLAttributesWithRootRef<HTMLDivElem
|
|
|
39
39
|
* @see https://vkcom.github.io/VKUI/#/ContentBadge
|
|
40
40
|
*/
|
|
41
41
|
export declare const ContentBadge: React.FC<ContentBadgeProps> & {
|
|
42
|
-
|
|
42
|
+
IconSlot: typeof ContentBadgeIconSlot;
|
|
43
|
+
/**
|
|
44
|
+
* @deprecated Since 7.3.4. Используйте `IconSlot`.
|
|
45
|
+
*/
|
|
46
|
+
SlotIcon: typeof ContentBadgeIconSlot;
|
|
43
47
|
};
|
|
44
48
|
//# sourceMappingURL=ContentBadge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentBadge.d.ts","sourceRoot":"","sources":["../../../src/components/ContentBadge/ContentBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAqC1E,MAAM,WAAW,iBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;IACjC;;OAEG;IACH,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,YAAY,GAAG,SAAS,CAAC;IAC9E;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,oBAAoB,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG;IACvD,QAAQ,EAAE,OAAO,oBAAoB,CAAC;CAkCvC,CAAC"}
|
|
1
|
+
{"version":3,"file":"ContentBadge.d.ts","sourceRoot":"","sources":["../../../src/components/ContentBadge/ContentBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAqC1E,MAAM,WAAW,iBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;IACjC;;OAEG;IACH,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,YAAY,GAAG,SAAS,CAAC;IAC9E;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,oBAAoB,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG;IACvD,QAAQ,EAAE,OAAO,oBAAoB,CAAC;IACtC;;OAEG;IACH,QAAQ,EAAE,OAAO,oBAAoB,CAAC;CAkCvC,CAAC"}
|
|
@@ -8,7 +8,7 @@ import { defineComponentDisplayNames } from "../../lib/react/defineComponentDisp
|
|
|
8
8
|
import { Caption } from "../Typography/Caption/Caption.js";
|
|
9
9
|
import { Footnote } from "../Typography/Footnote/Footnote.js";
|
|
10
10
|
import { ContentBadgeContext } from "./ContentBadgeContext.js";
|
|
11
|
-
import {
|
|
11
|
+
import { ContentBadgeIconSlot } from "./ContentBadgeIconSlot.js";
|
|
12
12
|
const appearanceClassNames = {
|
|
13
13
|
'accent': {
|
|
14
14
|
primary: "vkuiContentBadge__primaryAccent",
|
|
@@ -73,8 +73,10 @@ const sizeClassNames = {
|
|
|
73
73
|
})
|
|
74
74
|
}));
|
|
75
75
|
};
|
|
76
|
-
ContentBadge.
|
|
76
|
+
ContentBadge.IconSlot = ContentBadgeIconSlot;
|
|
77
|
+
ContentBadge.SlotIcon = ContentBadgeIconSlot;
|
|
77
78
|
if (process.env.NODE_ENV !== 'production') {
|
|
79
|
+
defineComponentDisplayNames(ContentBadge.IconSlot, 'ContentBadge.IconSlot');
|
|
78
80
|
defineComponentDisplayNames(ContentBadge.SlotIcon, 'ContentBadge.SlotIcon');
|
|
79
81
|
}
|
|
80
82
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ContentBadge/ContentBadge.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { Caption } from '../Typography/Caption/Caption';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport type { TypographyProps } from '../Typography/Typography';\nimport { ContentBadgeContext } from './ContentBadgeContext';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ContentBadge/ContentBadge.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { Caption } from '../Typography/Caption/Caption';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport type { TypographyProps } from '../Typography/Typography';\nimport { ContentBadgeContext } from './ContentBadgeContext';\nimport { ContentBadgeIconSlot } from './ContentBadgeIconSlot';\nimport type { ContentBadgeModeType, ContentBadgeSizeType } from './types';\nimport styles from './ContentBadge.module.css';\n\nconst appearanceClassNames = {\n 'accent': {\n primary: styles.primaryAccent,\n secondary: styles.secondaryAccent,\n outline: styles.outlineAccent,\n },\n 'neutral': {\n primary: styles.primaryNeutral,\n secondary: styles.secondaryNeutral,\n outline: styles.outlineNeutral,\n },\n 'accent-green': {\n primary: styles.primaryAccentGreen,\n secondary: styles.secondaryAccentGreen,\n outline: styles.outlineAccentGreen,\n },\n 'accent-red': {\n primary: styles.primaryAccentRed,\n secondary: styles.secondaryAccentRed,\n outline: styles.outlineAccentRed,\n },\n 'overlay': {\n primary: styles.primaryOverlay,\n secondary: styles.secondaryOverlay,\n outline: styles.outlineOverlay,\n },\n};\n\nconst sizeClassNames = {\n s: styles.sizeS,\n m: styles.sizeM,\n l: styles.sizeL,\n};\n\nexport interface ContentBadgeProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n Pick<TypographyProps, 'weight'> {\n /**\n * Вид отображения.\n */\n mode?: ContentBadgeModeType;\n /**\n * Цвет оформления.\n */\n appearance?: 'accent' | 'neutral' | 'accent-green' | 'accent-red' | 'overlay';\n /**\n * Включает приближение значения закругления к форме круга.\n *\n * > Note: игнорируется при size=\"s\".\n */\n capsule?: boolean;\n /**\n * Определяет отступы и размер текста.\n *\n * Соответствие размеров иконок в слоте `<ContentBadge.SlotIcon />`:\n *\n * - size=\"s\" – ⚠️ не поддерживает иконки;\n * - size=\"m\" – при **одиночной** иконке `16x16`, в остальных случаях `12x12`;\n * - size=\"l\" – при **одиночной** иконке `20x20`, в остальных случаях `16x16`.\n */\n size?: ContentBadgeSizeType;\n}\n\n/**\n * Компонент, который позволяет добавить текстовые или иконочные бейджи. Как правило, используются\n * поверх других элементов или рядом с ними.\n *\n * Используйте `ContentBadge.SlotIcon` для размещения иконок внутри `ContentBadge`.\n *\n * @since 6.1.0\n * @see https://vkcom.github.io/VKUI/#/ContentBadge\n */\nexport const ContentBadge: React.FC<ContentBadgeProps> & {\n IconSlot: typeof ContentBadgeIconSlot;\n /**\n * @deprecated Since 7.3.4. Используйте `IconSlot`.\n */\n SlotIcon: typeof ContentBadgeIconSlot;\n} = ({\n appearance = 'accent',\n mode = 'primary',\n capsule,\n size = 'm',\n weight = '2',\n className,\n children,\n ...restProps\n}: ContentBadgeProps) => {\n const TypographyComponent = size === 'l' ? Footnote : Caption;\n\n return (\n <TypographyComponent\n {...restProps}\n weight={weight}\n normalize\n className={classNames(\n className,\n styles.host,\n size !== 's' && capsule && styles.capsule,\n mode === 'outline' && styles.modeOutline,\n appearanceClassNames[appearance][mode],\n sizeClassNames[size],\n )}\n >\n <ContentBadgeContext.Provider\n value={{ isSingleChild: React.Children.count(children) === 1, size }}\n >\n {children}\n </ContentBadgeContext.Provider>\n </TypographyComponent>\n );\n};\n\nContentBadge.IconSlot = ContentBadgeIconSlot;\nContentBadge.SlotIcon = ContentBadgeIconSlot;\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(ContentBadge.IconSlot, 'ContentBadge.IconSlot');\n defineComponentDisplayNames(ContentBadge.SlotIcon, 'ContentBadge.SlotIcon');\n}\n"],"names":["React","classNames","defineComponentDisplayNames","Caption","Footnote","ContentBadgeContext","ContentBadgeIconSlot","appearanceClassNames","primary","secondary","outline","sizeClassNames","s","m","l","ContentBadge","appearance","mode","capsule","size","weight","className","children","restProps","TypographyComponent","normalize","Provider","value","isSingleChild","Children","count","IconSlot","SlotIcon","process","env","NODE_ENV"],"mappings":";;;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,2BAA2B,QAAQ,iDAA8C;AAE1F,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,QAAQ,QAAQ,qCAAkC;AAE3D,SAASC,mBAAmB,QAAQ,2BAAwB;AAC5D,SAASC,oBAAoB,QAAQ,4BAAyB;AAI9D,MAAMC,uBAAuB;IAC3B,UAAU;QACRC,OAAO;QACPC,SAAS;QACTC,OAAO;IACT;IACA,WAAW;QACTF,OAAO;QACPC,SAAS;QACTC,OAAO;IACT;IACA,gBAAgB;QACdF,OAAO;QACPC,SAAS;QACTC,OAAO;IACT;IACA,cAAc;QACZF,OAAO;QACPC,SAAS;QACTC,OAAO;IACT;IACA,WAAW;QACTF,OAAO;QACPC,SAAS;QACTC,OAAO;IACT;AACF;AAEA,MAAMC,iBAAiB;IACrBC,CAAC;IACDC,CAAC;IACDC,CAAC;AACH;AA+BA;;;;;;;;CAQC,GACD,OAAO,MAAMC,eAMT;QAAC,EACHC,aAAa,QAAQ,EACrBC,OAAO,SAAS,EAChBC,OAAO,EACPC,OAAO,GAAG,EACVC,SAAS,GAAG,EACZC,SAAS,EACTC,QAAQ,EAEU,WADfC;QAPHP;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,sBAAsBL,SAAS,MAAMf,WAAWD;IAEtD,qBACE,KAACqB,6DACKD;QACJH,QAAQA;QACRK,SAAS;QACTJ,WAAWpB,WACToB,qCAEAF,SAAS,OAAOD,wCAChBD,SAAS,8CACTV,oBAAoB,CAACS,WAAW,CAACC,KAAK,EACtCN,cAAc,CAACQ,KAAK;kBAGtB,cAAA,KAACd,oBAAoBqB,QAAQ;YAC3BC,OAAO;gBAAEC,eAAe5B,MAAM6B,QAAQ,CAACC,KAAK,CAACR,cAAc;gBAAGH;YAAK;sBAElEG;;;AAIT,EAAE;AAEFP,aAAagB,QAAQ,GAAGzB;AACxBS,aAAaiB,QAAQ,GAAG1B;AAExB,IAAI2B,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzCjC,4BAA4Ba,aAAagB,QAAQ,EAAE;IACnD7B,4BAA4Ba,aAAaiB,QAAQ,EAAE;AACrD"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { HTMLAttributesWithRootRef } from '../../types';
|
|
2
|
+
type ContentBadgeIconSlotProps = HTMLAttributesWithRootRef<HTMLDivElement>;
|
|
3
|
+
export declare const ContentBadgeIconSlot: ({ className, getRootRef, children, ...restProps }: ContentBadgeIconSlotProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=ContentBadgeIconSlot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentBadgeIconSlot.d.ts","sourceRoot":"","sources":["../../../src/components/ContentBadge/ContentBadgeIconSlot.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAc7D,KAAK,yBAAyB,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;AAE3E,eAAO,MAAM,oBAAoB,GAAI,mDAKlC,yBAAyB,mDAmB3B,CAAC"}
|
|
@@ -14,7 +14,7 @@ const singleIconClassNames = {
|
|
|
14
14
|
m: "vkuiContentBadge__singleIconSlotSizeM",
|
|
15
15
|
l: "vkuiContentBadge__singleIconSlotSizeL"
|
|
16
16
|
};
|
|
17
|
-
export const
|
|
17
|
+
export const ContentBadgeIconSlot = (_param)=>{
|
|
18
18
|
var { className, getRootRef, children } = _param, restProps = _object_without_properties(_param, [
|
|
19
19
|
"className",
|
|
20
20
|
"getRootRef",
|
|
@@ -32,4 +32,4 @@ export const ContentBadgeSlotIcon = (_param)=>{
|
|
|
32
32
|
}));
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
-
//# sourceMappingURL=
|
|
35
|
+
//# sourceMappingURL=ContentBadgeIconSlot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ContentBadge/ContentBadgeIconSlot.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { ContentBadgeContext } from './ContentBadgeContext';\nimport styles from './ContentBadge.module.css';\n\nconst iconsClassNames = {\n m: null,\n l: styles.iconSlotSizeL,\n};\n\nconst singleIconClassNames = {\n m: styles.singleIconSlotSizeM,\n l: styles.singleIconSlotSizeL,\n};\n\ntype ContentBadgeIconSlotProps = HTMLAttributesWithRootRef<HTMLDivElement>;\n\nexport const ContentBadgeIconSlot = ({\n className,\n getRootRef,\n children,\n ...restProps\n}: ContentBadgeIconSlotProps) => {\n const { size, isSingleChild } = React.useContext(ContentBadgeContext);\n\n if (size === 's') {\n return null;\n }\n\n return (\n <div\n ref={getRootRef}\n className={classNames(\n className,\n isSingleChild ? singleIconClassNames[size] : iconsClassNames[size],\n )}\n {...restProps}\n >\n {children}\n </div>\n );\n};\n"],"names":["React","classNames","ContentBadgeContext","iconsClassNames","m","l","singleIconClassNames","ContentBadgeIconSlot","className","getRootRef","children","restProps","size","isSingleChild","useContext","div","ref"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,mBAAmB,QAAQ,2BAAwB;AAG5D,MAAMC,kBAAkB;IACtBC,GAAG;IACHC,CAAC;AACH;AAEA,MAAMC,uBAAuB;IAC3BF,CAAC;IACDC,CAAC;AACH;AAIA,OAAO,MAAME,uBAAuB;QAAC,EACnCC,SAAS,EACTC,UAAU,EACVC,QAAQ,EAEkB,WADvBC;QAHHH;QACAC;QACAC;;IAGA,MAAM,EAAEE,IAAI,EAAEC,aAAa,EAAE,GAAGb,MAAMc,UAAU,CAACZ;IAEjD,IAAIU,SAAS,KAAK;QAChB,OAAO;IACT;IAEA,qBACE,KAACG;QACCC,KAAKP;QACLD,WAAWP,WACTO,WACAK,gBAAgBP,oBAAoB,CAACM,KAAK,GAAGT,eAAe,CAACS,KAAK;OAEhED;kBAEHD;;AAGP,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormItem.d.ts","sourceRoot":"","sources":["../../../src/components/FormItem/FormItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAclE,MAAM,WAAW,aACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,UAAU,CAAC,WAAW,CAAC,EACvB,YAAY,EACZ,cAAc;IAChB;;OAEG;IACH,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACjC;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACvC;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG;IAC/C,GAAG,EAAE,OAAO,WAAW,CAAC;IACxB,QAAQ,EAAE,OAAO,gBAAgB,CAAC;IAClC,QAAQ,EAAE,OAAO,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"FormItem.d.ts","sourceRoot":"","sources":["../../../src/components/FormItem/FormItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAclE,MAAM,WAAW,aACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,UAAU,CAAC,WAAW,CAAC,EACvB,YAAY,EACZ,cAAc;IAChB;;OAEG;IACH,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACjC;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACvC;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG;IAC/C,GAAG,EAAE,OAAO,WAAW,CAAC;IACxB,QAAQ,EAAE,OAAO,gBAAgB,CAAC;IAClC,QAAQ,EAAE,OAAO,gBAAgB,CAAC;CAuFnC,CAAC"}
|
|
@@ -26,7 +26,7 @@ const stylesStatus = {
|
|
|
26
26
|
/**
|
|
27
27
|
* @see https://vkcom.github.io/VKUI/#/FormItem
|
|
28
28
|
*/ export const FormItem = (_param)=>{
|
|
29
|
-
var { children, top, topId, topMultiline = false, topComponent: topComponentProp, bottom, status = 'default', removable, onRemove, removePlaceholder = 'Удалить', getRootRef, htmlFor, bottomId, noPadding, required = false } = _param, restProps = _object_without_properties(_param, [
|
|
29
|
+
var { children, top, topId, topMultiline = false, topComponent: topComponentProp, bottom, status = 'default', removable, onRemove, removePlaceholder = 'Удалить', getRootRef, htmlFor, bottomId, noPadding, required = false, disabled } = _param, restProps = _object_without_properties(_param, [
|
|
30
30
|
"children",
|
|
31
31
|
"top",
|
|
32
32
|
"topId",
|
|
@@ -41,7 +41,8 @@ const stylesStatus = {
|
|
|
41
41
|
"htmlFor",
|
|
42
42
|
"bottomId",
|
|
43
43
|
"noPadding",
|
|
44
|
-
"required"
|
|
44
|
+
"required",
|
|
45
|
+
"disabled"
|
|
45
46
|
]);
|
|
46
47
|
const rootEl = useExternRef(getRootRef);
|
|
47
48
|
const { sizeY = 'none' } = useAdaptivity();
|
|
@@ -86,6 +87,7 @@ const stylesStatus = {
|
|
|
86
87
|
removePlaceholder: removePlaceholder,
|
|
87
88
|
indent: removable === 'indent',
|
|
88
89
|
noPadding: noPadding,
|
|
90
|
+
disabled: disabled,
|
|
89
91
|
children: /*#__PURE__*/ _jsx("div", {
|
|
90
92
|
className: classNames("vkuiFormItem__removable", 'vkuiInternalFormItem__removable'),
|
|
91
93
|
children: wrappedChildren
|