Referência da API para React

Referência completa dos componentes, das props e dos métodos de @reelkit/react.

Props do Reel

ReelProps

PropTipoPadrãoDescrição
countnumberobrigatórioNúmero total de itens
size[number, number]-Largura e altura, na forma [largura, altura]. Sem esta prop, o tamanho é medido pelo ResizeObserver
itemBuilder(index, indexInRange, size) => ReactElementobrigatórioFunção que renderiza cada slide
direction'vertical' | 'horizontal''vertical'Direção do deslocamento
initialIndexnumber0Índice inicial
loopbooleanfalseLiga o ciclo infinito
enableWheelbooleanfalseLiga a navegação pela roda do mouse
wheelDebounceMsnumber200Debounce do evento de roda, em ms
enableNavKeysbooleantrueLiga a navegação por teclado
onNavKeyPress(increment: -1 | 1) => void-Tratamento próprio das setas. Substitui o comportamento padrão de avançar e voltar.
transitionTransitionTransformFnslideTransitionFunção do efeito de transição. Prontas: slideTransition, fadeTransition, flipTransition, cubeTransition, zoomTransition
transitionDurationnumber300Duração da animação em ms
enableGesturesbooleantrueLiga a navegação por arrasto de toque ou mouse
swipeDistanceFactornumber0.12Limiar do deslize (0-1)
rangeExtractor(index: number, count: number) => number[]defaultRangeExtractorFunção própria para decidir quais índices são renderizados
keyExtractor(index: number) => string-Função de chave própria para a reconciliação do React (útil com loop)
apiRefRefObject<ReelApi>-Ref para alcançar os métodos da API
classNamestring-Classe CSS do elemento contêiner
styleCSSProperties-Estilos inline do elemento contêiner
ariaLabelstring-Rótulo acessível da região do carrossel, lido por leitores de tela

Callbacks

PropTipoDescrição
afterChange(index, indexInRange) => voidChamado depois que a troca de slide termina
beforeChange(index, nextIndex, indexInRange) => voidChamado antes de a troca de slide começar
onSlideDragStart(index) => voidChamado quando o gesto de arrasto começa
onSlideDragEnd(index) => voidChamado quando o gesto de arrasto termina
onSlideDragCanceled(index) => voidChamado quando o arrasto é cancelado

Métodos do ReelApi

Alcance os métodos do slider pelo apiRef:

typescript
const apiRef = useRef<ReelApi>(null);

// Navigation
apiRef.current?.next();
apiRef.current?.prev();
apiRef.current?.goTo(5);           // instant
apiRef.current?.goTo(5, true);     // animated

// Lifecycle
apiRef.current?.adjust();          // recalculate positions
apiRef.current?.observe();         // start observing keyboard
apiRef.current?.unobserve();       // stop observing keyboard
MétodoTipoDescrição
next()() => voidVai para o próximo slide
prev()() => voidVai para o slide anterior
goTo(index, animate?)(number, boolean?) => PromiseVai para um slide específico
adjust()() => voidRecalcula as posições dos slides
observe()() => voidComeça a observar o teclado
unobserve()() => voidPara de observar o teclado

Props do ReelIndicator

ReelIndicatorProps

PropTipoPadrãoDescrição
countnumberautomáticoNúmero total de itens. Vem sozinho do Reel que o envolve; passe explicitamente ao usar o indicador isolado
activenumberautomáticoÍndice ativo no momento. Vem sozinho do Reel que o envolve; passe explicitamente ao usar o indicador isolado
direction'vertical' | 'horizontal''vertical'Orientação do indicador
radiusnumber3Tamanho do ponto em pixels
visiblenumber5Máximo de pontos em tamanho normal visíveis
gapnumber4Espaço entre os pontos em pixels
activeColorstring'#fff'Cor do ponto ativo
inactiveColorstring'rgba(255,255,255,0.5)'Cor dos pontos inativos
edgeScalenumber0.5Escala dos pontos que transbordam nas bordas
onDotClick(index: number) => void-Callback do clique em um ponto
classNamestring-Classe CSS própria
styleCSSProperties-Estilos inline próprios

Componentes observadores

Observe

Faz a ponte entre os sinais do core e a renderização do React sem provocar re-renderizações no componente pai. Só a função dos filhos roda de novo quando os sinais assinados mudam.

tsx
import { Observe } from '@reelkit/react';

<Observe signals={[controller.state.index]}>
  {() => <span>Current: {controller.state.index.value}</span>}
</Observe>
PropTipoPadrãoDescrição
signalsSubscribable[]obrigatórioSinais a assinar. Qualquer aviso de um deles roda a função dos filhos de novo — só ela, nunca o componente pai. Um sinal diferente em uma renderização posterior passa a ser acompanhado no lugar do que ele substituiu.
children() => ReactElement | nullobrigatórioFunção de renderização, executada de novo a cada mudança. Leia os valores dos sinais dentro dela; um valor lido fora é capturado uma vez e envelhece.

AnimatedObserve

Assina sinais de valor animado e interpola suavemente usando requestAnimationFrame.

tsx
import { AnimatedObserve } from '@reelkit/react';

<AnimatedObserve signal={controller.state.axisValue}>
  {(value) => (
    <div style={{ transform: `translateY(${value}px)` }} />
  )}
</AnimatedObserve>
PropTipoPadrãoDescrição
signalSignal<AnimatedValue>obrigatórioSinal que emite { value, duration, done? }. Uma duração acima de 0 interpola do valor atual até o novo; 0 salta direto para lá.
children(value: number) => ReactElementobrigatórioFunção de renderização que recebe o valor interpolado do quadro atual, aplicado de forma síncrona para que o DOM acompanhe a animação.

SwipeToClose

<SwipeToClose> envolve os filhos num contêiner que acompanha um deslize vertical e chama onClose quando o deslize passa do limiar — o gesto de fechar do Lightbox e do Stories Player, para um overlay próprio. SwipeToCloseProps tipa as props; SwipeToCloseDirection é 'up' | 'down'.

PropTipoPadrãoDescrição
directionSwipeToCloseDirectionobrigatório'up' fecha como o Lightbox, 'down' como o Stories Player
onClose() => voidobrigatórioChamado depois que o deslize passa do limiar e a animação de saída termina
enabledbooleantrueDesliga o gesto sem desmontar
thresholdnumber0.2Fração da altura da viewport que o deslize precisa percorrer
classNamestring—Classe no <div> externo
childrenReactNodeobrigatórioConteúdo que se move com o deslize

SoundProvider

<SoundProvider> cria um SoundController, mudo no início, e o entrega aos filhos por meio de useSoundState. Os overlays já renderizam um para você; adicione o seu apenas em volta de um player próprio cujos controles compartilham o estado do som.

Hooks

useBodyLock

Trava a rolagem do corpo e compensa o deslocamento causado pela largura da barra de rolagem.

typescript
import { useBodyLock } from '@reelkit/react';

// Lock body scroll when overlay is open
useBodyLock(isOpen);

useOverlayUrlState

OverlayUrlStateOptions

Monta um controlador de estado na URL para o overlay, que você entrega a um *UrlOverlay pela prop controller.

Veja Estado na URL no guia para React para o passo a passo e os exemplos.

OpçãoTipoPadrãoDescrição
paramstringobrigatórioParâmetro de consulta que carrega o slide ativo, por exemplo "photo". Lido na primeira renderização e fixo por toda a vida do componente — remonte (dê a ele uma key) para trocá-lo.
adapterUrlAdapterHistory APISistema de navegação por onde ler e escrever. Em um app com rotas, passe um adaptador ligado ao roteador para que a localização dele não fique desatualizada. Lido na primeira renderização e fixo por toda a vida do componente — remonte para trocá-lo.
codec{ decode(raw) => Id | null; encode(id) => string }obrigatórioFormato do fio: texto do parâmetro ↔ identidade estável, sem enxergar a coleção. Anda junto do locator como par combinado que divide o mesmo Id — espalhe ...urlIndexKey(() => images.length) para a galeria padrão endereçada por índice em ?photo=3, ou forneça o seu (base64, slug) para que um favorito sobreviva à galeria mudar de ordem. Lido ao vivo: o codec da última renderização cuida da próxima decodificação ou codificação.
locator{ locate(id) => number | null; locateAsync?(id) => Promise<number | null>; identify(index) => id }obrigatórioLiga a identidade a uma posição e responde pela própria validade: locate (síncrono), locateAsync (plano B assíncrono de uma galeria paginada) e identify (nas escritas). Em uma galeria simples por índice, espalhe ...urlIndexKey(() => images.length) — ele fornece este locator mais o codec correspondente e limita ?photo=3 pela contagem atual, então um ?photo=99 velho se cura saindo da URL em vez de abrir um slide que ninguém nomeou. Um feed paginado ou uma galeria endereçada por identidade fornece o próprio par de codec e locator. Lido ao vivo: o locator da última renderização responde à próxima busca, e acrescentar ou remover locateAsync entre renderizações vale já na falha seguinte.

useReactRouterUrlAdapter

Um UrlAdapter apoiado no React Router. Passe-o na opção adapter de useOverlayUrlState em um app com rotas, para que o roteador siga sendo a única fonte de verdade da navegação — escrever history.pushState por trás dele deixa sua localização desatualizada, e a navegação seguinte derruba o parâmetro. As escritas mexem apenas na consulta, então o caminho e o hash seguem intactos. Cada mudança informa se o roteador empilhou na mesma página, substituiu ou andou pelo histórico, de modo que uma galeria aberta por um <Link> fecha com um único passo para trás.

Vem de um subcaminho próprio, então um app sem roteador nunca puxa react-router-dom para o bundle. react-router-dom é uma peer dependency opcional.

tsx
import { useReactRouterUrlAdapter } from '@reelkit/react/react-router-url-adapter';

const adapter = useReactRouterUrlAdapter();
const photo = useOverlayUrlState({
  param: 'photo',
  adapter,
  ...urlIndexKey(() => images.length),
});

useReelContext

useReelContext() lê o ReelContextValue do <Reel> pai mais próximo, ou devolve null fora de um. O <ReelIndicator> o usa para se conectar; use-o nos seus próprios controles renderizados como filhos do <Reel>, para que acompanhem o slider sem props. ReelContext é o objeto de contexto por trás dele — forneça um valor seu apenas num teste ou num wrapper próprio.

PropriedadeTipoDescrição
indexSignal<number>Índice do slide ativo; leia .value dentro de Observe
countSignal<number>Número total de slides
goTo(index: number, animate?: boolean) => Promise<void>Vai para um slide, com ou sem animação

useSoundState

useSoundState() lê o SoundController do <SoundProvider> mais próximo e lança um erro fora de um. O Reel Player, o Lightbox e o Stories Player envolvem o conteúdo num provider, então os controles próprios que você passa pelas render props deles podem chamá-lo para ler ou alternar o som.

useFullscreen

useFullscreen({ ref }) controla a Fullscreen API para o elemento em ref e sai da tela cheia quando o componente é desmontado. UseFullscreenProps é o argumento; UseFullscreenResult é a tupla que ele devolve.

ÍndiceTipoDescrição
[0]Signal<boolean>Se a página está em tela cheia; leia .value dentro de Observe
[1]() => Promise<void>Pede tela cheia para o elemento, saindo antes de outro elemento em tela cheia
[2]() => Promise<void>Sai da tela cheia
[3]() => Promise<void>Alterna entre os dois

Acessibilidade

<Reel> é renderizado como role="region" com aria-roledescription="carousel". Defina a prop ariaLabel para dar à região um nome que o leitor de tela anuncie. Uma live region educada anuncia "Slide N de M" a cada troca, sem re-renderizar o carrossel. Os slides inativos recebem o atributo inert, então o foco e a navegação por tecnologia assistiva passam por cima deles.

<ReelIndicator> é renderizado como role="tablist", com tabindex móvel nos pontos; as setas movem o foco e Enter ou Espaço ativa o slide.

Montando um modal próprio em volta de <Reel>? captureFocusForReturn, createFocusTrap e getFocusableElements são reexportados por @reelkit/react para devolver e prender o foco.

Utilitários

createDefaultKeyExtractorForLoop

Cria um extrator de chaves que dá conta dos índices repetidos quando loop está ligado.

tsx
import { createDefaultKeyExtractorForLoop } from '@reelkit/react';

<Reel
  count={items.length}
  size={size}
  loop
  keyExtractor={createDefaultKeyExtractorForLoop(items.length)}
  itemBuilder={...}
/>

Detecção de tamanho

observeElementSize, getViewportSize, observeViewportSize, isMobileWidth, fitAspectRatio e isTouchDevice são reexportados por @reelkit/react, para um overlay próprio que se dimensione do mesmo jeito que os do reelkit. Veja Detecção de tamanho na API do core.

Reprodução automática e download

createTimerController, createSlideshowController e downloadFile também são reexportados por @reelkit/react: o timer por trás dos players de stories, a apresentação por trás do autoAdvance do lightbox e o helper por trás do seu botão de download. Veja Reprodução automática e Download na API do core.