diff --git a/packages/vkui/src/components/BaseGallery/BaseGallery.module.css b/packages/vkui/src/components/BaseGallery/BaseGallery.module.css index bf74ea716b..5dfb573305 100644 --- a/packages/vkui/src/components/BaseGallery/BaseGallery.module.css +++ b/packages/vkui/src/components/BaseGallery/BaseGallery.module.css @@ -74,6 +74,10 @@ margin-block: 0; margin-inline: 3px; opacity: var(--vkui--opacity_disable_accessibility); + border: 0; + outline: 0; + padding: 0; + cursor: pointer; } .BaseGallery__bullet--active { diff --git a/packages/vkui/src/components/BaseGallery/BaseGallery.tsx b/packages/vkui/src/components/BaseGallery/BaseGallery.tsx index 001a869ace..b63e97a6b0 100644 --- a/packages/vkui/src/components/BaseGallery/BaseGallery.tsx +++ b/packages/vkui/src/components/BaseGallery/BaseGallery.tsx @@ -8,6 +8,7 @@ import { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect'; import { RootComponent } from '../RootComponent/RootComponent'; import { ScrollArrow } from '../ScrollArrow/ScrollArrow'; import { Touch, TouchEvent } from '../Touch/Touch'; +import { GalleryBullets } from './GalleryBullets/GalleryBullets'; import { calcMax, calcMin } from './helpers'; import { BaseGalleryProps, GallerySlidesState, LayoutState, ShiftingState } from './types'; import styles from './BaseGallery.module.css'; @@ -32,10 +33,6 @@ const SHIFT_DEFAULT_STATE = { indent: 0, }; -const stylesBullets = { - dark: styles['BaseGallery__bullets--dark'], - light: styles['BaseGallery__bullets--light'], -}; export const BaseGallery = ({ bullets = false, getRootRef, @@ -52,6 +49,8 @@ export const BaseGallery = ({ showArrows, getRef, arrowSize = 'l', + bulletsClassName, + slideClassName, ...restProps }: BaseGalleryProps): React.ReactNode => { const slidesStore = React.useRef>({}); @@ -338,7 +337,7 @@ export const BaseGallery = ({
{React.Children.map(children, (item: React.ReactNode, i: number) => (
setSlideRef(el, i)} > @@ -349,20 +348,14 @@ export const BaseGallery = ({ {bullets && ( -
- {React.Children.map(children, (_item: React.ReactNode, index: number) => ( -
- ))} -
+ {children} + )} {showArrows && hasPointer && canSlideLeft && ( diff --git a/packages/vkui/src/components/BaseGallery/CarouselBase/CarouselBase.tsx b/packages/vkui/src/components/BaseGallery/CarouselBase/CarouselBase.tsx index cae64e2cf5..2682799914 100644 --- a/packages/vkui/src/components/BaseGallery/CarouselBase/CarouselBase.tsx +++ b/packages/vkui/src/components/BaseGallery/CarouselBase/CarouselBase.tsx @@ -9,6 +9,7 @@ import { warnOnce } from '../../../lib/warnOnce'; import { RootComponent } from '../../RootComponent/RootComponent'; import { ScrollArrow } from '../../ScrollArrow/ScrollArrow'; import { Touch, TouchEvent } from '../../Touch/Touch'; +import { GalleryBullets } from '../GalleryBullets/GalleryBullets'; import { BaseGalleryProps, GallerySlidesState } from '../types'; import { ANIMATION_DURATION, CONTROL_ELEMENTS_STATE, SLIDES_MANAGER_STATE } from './constants'; import { calculateIndent, getLoopPoints, getTargetIndex } from './helpers'; @@ -16,11 +17,6 @@ import { useSlideAnimation } from './hooks'; import { ControlElementsState, SlidesManagerState } from './types'; import styles from '../BaseGallery.module.css'; -const stylesBullets = { - dark: styles['BaseGallery__bullets--dark'], - light: styles['BaseGallery__bullets--light'], -}; - const warn = warnOnce('Gallery'); export const CarouselBase = ({ @@ -39,6 +35,8 @@ export const CarouselBase = ({ showArrows, getRef, arrowSize = 'l', + bulletsClassName, + slideClassName, ...restProps }: BaseGalleryProps): React.ReactNode => { const slidesStore = React.useRef>({}); @@ -337,7 +335,7 @@ export const CarouselBase = ({
{React.Children.map(children, (item: React.ReactNode, i: number) => (
setSlideRef(el, i)} > @@ -348,20 +346,14 @@ export const CarouselBase = ({ {bullets && ( -
- {React.Children.map(children, (_item: React.ReactNode, index: number) => ( -
- ))} -
+ {children} + )} {showArrows && hasPointer && canSlideLeft && ( diff --git a/packages/vkui/src/components/BaseGallery/GalleryBullets/GalleryBullets.tsx b/packages/vkui/src/components/BaseGallery/GalleryBullets/GalleryBullets.tsx new file mode 100644 index 0000000000..3b01c55187 --- /dev/null +++ b/packages/vkui/src/components/BaseGallery/GalleryBullets/GalleryBullets.tsx @@ -0,0 +1,46 @@ +import * as React from 'react'; +import { classNames } from '@vkontakte/vkjs'; +import { Tappable } from '../../Tappable/Tappable'; +import { BaseGalleryProps } from '../types'; +import styles from '../BaseGallery.module.css'; + +const stylesBullets = { + dark: styles['BaseGallery__bullets--dark'], + light: styles['BaseGallery__bullets--light'], +}; + +interface GalleryBulletsProps + extends Pick { + bullets: Exclude; +} + +export const GalleryBullets = ({ + bullets, + slideIndex, + children, + onChange, + bulletsClassName, +}: GalleryBulletsProps) => { + return ( +
+ {React.Children.map(children, (_item: React.ReactNode, index: number) => ( + onChange?.(index)} + key={index} + /> + ))} +
+ ); +}; diff --git a/packages/vkui/src/components/BaseGallery/types.ts b/packages/vkui/src/components/BaseGallery/types.ts index 0a5bd072c7..5c52969db3 100644 --- a/packages/vkui/src/components/BaseGallery/types.ts +++ b/packages/vkui/src/components/BaseGallery/types.ts @@ -43,6 +43,8 @@ export interface BaseGalleryProps */ onNextClick?: (event: React.MouseEvent) => void; bullets?: 'dark' | 'light' | false; + bulletsClassName?: string; + slideClassName?: string; /** * Позволяет отключить реагирование на тач-события */