Feito sobre o UI SDK 0.1.0-beta.1 da Vercel. A API pode mudar.
Rating
Uma avaliação por estrelas sobre o UI SDK da Vercel, com estrelas inteiras ou meias, prévia ao passar o mouse, médias somente leitura e suporte a formulários.
- Componentes de formulário
- 2 partes
- 10 exemplos
@tabler/icons-react@ui-sdk/core@ui-sdk/reactclass-variance-authority
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-rating.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @ui-sdk/react@0.1.0-beta.1 @ui-sdk/core@0.1.0-beta.1 @tabler/icons-react class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/ui-sdk-rating.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
O UI SDK adiciona um pouco de CSS próprio em uma camada de cascata chamada ui-sdk. Declare essa camada no topo da sua folha de estilos global, acima do import do Tailwind, para que suas classes vençam.
Rating renderiza o filho uma vez por estrela, então coloque um RatingItem dentro. Cada estrela desenha uma estrela vazia com uma cheia recortada em --rating-fill, então meias estrelas e médias como 4,3 aparecem exatas.
Com step={0.5}, cada metade de estrela é um radio próprio, e as setas andam meia estrela.
Uma avaliação somente leitura é uma imagem nomeada por getValueLabel e mostra qualquer nota, como uma média.
size é sm, default ou lg.
Com deselectable, pressionar de novo a estrela marcada limpa a nota.
Passe value e onValueChange, em que null significa sem nota ainda. Um controlador de createRatingController() define a nota de qualquer lugar.
Com um name, a nota é enviada com o formulário. required bloqueia o envio até haver uma nota, com a mensagem do próprio navegador.
Passe seu próprio ícone como filho de RatingItem e troque-o com data-filled. tone define a cor.
Uma avaliação desativada não recebe foco nem muda, e não envia nada.
As estrelas começam pela direita, e uma meia estrela se preenche a partir da borda direita.
| Tecla | Ação |
|---|---|
| Tab | Entra na avaliação, na estrela marcada ou na primeira. |
| ←→↑↓ | Vai para a nota seguinte ou anterior e a marca, parando nas pontas a menos que loop esteja ativo. |
| Space | Marca a estrela focada, ou a desmarca quando já está marcada e a avaliação é desmarcável. |
| Enter | Envia o formulário. |
Uma avaliação é um grupo de radios com uma única parada de tab. Cada estrela tem um radio por nota que pode escolher, nomeado por getValueLabel, então nomeie as notas com palavras que as pessoas usam, como “Ótimo, 5 de 5”. Os ícones de estrela ficam ocultos para leitores de tela. Uma avaliação somente leitura é uma única imagem.
As estrelas só crescem ao passar o mouse e encolhem ao pressionar quando o movimento é permitido. Em telas de toque cada estrela ganha espaçamento extra, e no modo de cores forçadas as estrelas cheias usam a cor do texto e as vazias o cinza do sistema.
Cada parte envolve a parte do UI SDK de mesmo nome e aceita todas as suas props, incluindo render e um className que pode ser uma função do estado da parte.
| Prop | Tipo | Padrão |
|---|---|---|
value | number | null | – |
defaultValue | number | null | – |
onValueChange | (value: number | null, details) => void | – |
max | number | 5 |
step | number | 1 |
size | "sm" | "default" | "lg" | "default" |
tone | "default" | "neutral" | "destructive" | "default" |
deselectable | boolean | false |
readOnly | boolean | false |
disabled | boolean | false |
required | boolean | false |
name | string | – |
loop | boolean | false |
getValueLabelNomeia cada nota para seu radio e para uma avaliação somente leitura. | (value: number, max: number) => string | – |
controllerDe createRatingController(). | RatingController | – |
| Atributo | Descrição |
|---|---|
data-slot="rating" | Seleciona a avaliação no CSS. |
data-size | O tamanho: sm, default ou lg. |
data-tone | O tom: default, neutral ou destructive. |
data-readonly | Presente quando somente leitura. |
data-disabled | Presente quando desabilitado. |
--rating-color | A cor das estrelas cheias, definida por tone. |
| Prop | Tipo | Padrão |
|---|---|---|
childrenO ícone da estrela. Por padrão, uma estrela do Tabler que se preenche por --rating-fill. | ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descrição |
|---|---|
data-slot="rating-item" | Seleciona uma estrela no CSS. |
data-filled | Presente nas estrelas que a nota exibida cobre por inteiro. |
data-partial | Presente na estrela que a nota exibida cobre em parte. |
data-checked | Presente na estrela em que a nota termina. |
data-highlighted | Presente nas estrelas até a nota que o ponteiro pré-visualiza. |
--rating-fill | Quanto da estrela a nota exibida cobre, de 0 a 1. |
- CalendarUma grade de datas para seleção única, de intervalo e múltipla, com meses deslizantes, prévias de intervalo e dias com tamanho adequado ao toque.
- CheckboxUma caixa de seleção cujo check é desenhado na tela, com pais indeterminados, grupos e rótulos que compartilham seu hover.
- ComboboxUm select filtrável com chips, grupos e resultados assíncronos, em um popup que se redimensiona conforme você digita.
- Date pickerUm botão que abre um calendário em um popover, ou em um bottom sheet no celular, para datas únicas e intervalos.
- FieldRótulos, descrições e erros ligados ao seu controle, com estados de validação e layouts para formulários.
- InputUm campo de texto com três tamanhos, estados inválido e somente leitura, estilo de validação nativa e fonte de 16px no toque para que os celulares nunca façam zoom.