Sheet
Folha de baixo
Lateral
import { Sheet } from '@rivocode/ui'Quando usar
Folha que desliza da borda da tela, com gesto de arrastar.
Compõe com SheetTrigger, SheetContent, SheetTitle, SheetDescription,
SheetHandle e SheetClose.
side decide de onde ela entra, e o gesto de fechar segue o lado. E a peça de
navegação no celular e o painel de ações onde o polegar alcança. O tipo é
SheetSide, e são três lados: bottom (o padrão), left e right. Não há
top, porque folha que desce do alto disputa com a barra de status do celular e
com todo cabeçalho fixo.
A tarja de fundo clareia junto com o dedo: puxar pela metade mostra metade do que esta atrás.
No React Native
Traduz: o @rivocode/ui-native exporta Sheet - só o comportamento de baixo, que já era o modo estreito do web; sobe deslizando, e sem transição quando o sistema pede para reduzir movimento; com campo dentro, a folha sobe junto com o teclado. A API não é a mesma do web (no nativo tudo é controlado), e a tabela de paridade diz o que muda peça a peça.
API
| Prop | Tipo |
|---|---|
actionsRef0.4.0A ref to imperative actions. | RefObject<DrawerRootActions | null> |
defaultOpen0.4.0Whether the drawer is initially open. | boolean |
defaultSnapPoint0.4.0The initial snap point value when uncontrolled. | DrawerSnapPoint | null |
defaultTriggerId0.4.0ID of the trigger that the drawer is associated with. | string | null |
disablePointerDismissal0.4.0Whether to prevent the drawer from closing on outside presses. | boolean |
handle0.4.0A handle to associate the drawer with a trigger. | DrawerHandle<unknown> |
modal0.4.0Determines if the drawer enters a modal state when open. | "trap-focus" | boolean |
onOpenChange0.4.0Event handler called when the drawer is opened or closed. | ((open: boolean, eventDetails: DrawerRootChangeEventDetails) => void) |
onOpenChangeComplete0.4.0Event handler called after any animations complete when the drawer is opened or closed. | ((open: boolean) => void) |
onSnapPointChange0.4.0Callback fired when the snap point changes. | ((snapPoint: DrawerSnapPoint | null, eventDetails: DrawerRootSnapPointChangeEventDetails) => void) |
open0.4.0Whether the drawer is currently open. | boolean |
side0.4.0De onde a folha entra. | SheetSide |
snapPoint0.4.0The currently active snap point. | DrawerSnapPoint | null |
snapPoints0.4.0Snap points used to position the drawer. | DrawerSnapPoint[] |
snapToSequentialPoints0.4.0Disables velocity-based snap skipping so drag distance determines the next snap point. | boolean |
triggerId0.4.0ID of the trigger that the drawer is associated with. | string | null |
Partes
Sheet se monta com estas peças. Todas vivem nesta página, porque separar cada uma num endereço obrigaria a abrir seis abas para montar uma tela.
SheetClose
/sheet-close.mdFecha a folha de dentro dela. Use render para emprestar o comportamento ao
botão que já existe no rodapé, em vez de somar mais um.
| Prop | Tipo |
|---|---|
nativeButton0.4.0Whether the component renders a native `<button>` element when replacing it via the `render` prop. | boolean |
render0.4.0Allows you to replace the component's HTML element with a different tag, or compose it with another component. | ComponentRenderFn<HTMLProps, DrawerCloseState>ReactElement<unknown, stringJSXElementConstructor<any>> |
Além destas, a peça aceita className, style, id e children, repassados ao elemento de baixo.
SheetContent
/sheet-content.mdO painel, com a tarja de fundo e o portal por dentro.
Monta em portal no container do RivoProvider, então o tema vale ali dentro.
Não recebe side: o lado mora na raiz, porque o gesto de fechar tem que
concordar com a direção de onde a folha entrou.
A tarja é irmã do painel dentro do portal, então nem className nem variante de
descendente alcançam ela. Para vestir as duas, use classNames com as partes
backdrop e viewport.
| Prop | Tipo |
|---|---|
classNames0.5.0Classe por parte: `backdrop`, `viewport`. | Partial<Record<"backdrop" | "viewport", string>> |
finalFocus0.4.0Determines the element to focus when the drawer is closed. | booleanRefObject<HTMLElementnull>((closeType: InteractionType) => voidbooleanHTMLElementnull) |
initialFocus0.4.0Determines the element to focus when the drawer is opened. | booleanRefObject<HTMLElementnull>((openType: InteractionType) => voidbooleanHTMLElementnull) |
render0.4.0Allows you to replace the component's HTML element with a different tag, or compose it with another component. | ComponentRenderFn<HTMLProps, DrawerPopupState>ReactElement<unknown, stringJSXElementConstructor<any>> |
Além destas, a peça aceita className, style, id e children, repassados ao elemento de baixo.
SheetDescription
/sheet-description.mdA linha de contexto embaixo do título, ligada ao painel por aria-describedby.
| Prop | Tipo |
|---|---|
render0.4.0Allows you to replace the component's HTML element with a different tag, or compose it with another component. | ComponentRenderFn<HTMLProps, DrawerDescriptionState>ReactElement<unknown, stringJSXElementConstructor<any>> |
Além destas, a peça aceita className, style, id e children, repassados ao elemento de baixo.
SheetHandle
/sheet-handle.mdA barrinha de pegar, só na folha de baixo.
É o único aviso de que dá para arrastar. Sem ela o gesto continua existindo e ninguém descobre, e aí a única saída visível é o clique fora, que na folha de baixo fica no meio do conteúdo que a pessoa veio ler.
Sai escondida do leitor de tela: quem navega por teclado fecha com Esc, e uma barra decorativa anunciada só atrapalha.
Sem prop própria: repassa ao elemento de baixo o que você mandar.
SheetTitle
/sheet-title.mdO título da folha, e o nome dela para o leitor de tela.
Folha sem título é um painel que se abre sem dizer o que é: quem usa leitor de
tela ouve só "diálogo". Quando o desenho não comporta título visível, o
aria-label no SheetContent faz o papel.
| Prop | Tipo |
|---|---|
render0.4.0Allows you to replace the component's HTML element with a different tag, or compose it with another component. | ComponentRenderFn<HTMLProps, DrawerTitleState>ReactElement<unknown, stringJSXElementConstructor<any>> |
Além destas, a peça aceita className, style, id e children, repassados ao elemento de baixo.
SheetTrigger
/sheet-trigger.mdO que abre a folha. Use render para emprestar o gatilho a um Button, em vez
de aninhar um botão dentro de outro.
| Prop | Tipo |
|---|---|
handle0.4.0A handle to associate the trigger with a drawer. | DrawerHandle<Payload> |
nativeButton0.4.0Whether the component renders a native `<button>` element when replacing it via the `render` prop. | boolean |
payload0.4.0A payload to pass to the drawer when it is opened. | Payload |
render0.4.0Allows you to replace the component's HTML element with a different tag, or compose it with another component. | ComponentRenderFn<HTMLProps, DrawerTriggerState>ReactElement<unknown, stringJSXElementConstructor<any>> |
Além destas, a peça aceita className, style, id e children, repassados ao elemento de baixo.