Sistema de componentes empresariais · Novo recurso

Sistema de design React Suite.

Um calendário de revisão nativo do React Suite, com variáveis CSS verificadas da versão 6, marcadores nas células de data, agenda do dia selecionado, validação em modal e regras explícitas para agendamentos locais.

Guia OpenDesign9 capítulos39 entradas de referênciaGuia de aplicação original
01

Prévia da interface do sistema de design React Suite

Selecione um dia, confira as sessões locais, adicione uma por meio de um modal ou remova uma. Não é possível adicionar itens nos fins de semana.

Calendário de revisão da equipeAbrir exemplo completo
Calendar, Panel, Modal, Input, Message, Button e Tag nativos do React Suite 6.2.4. · Referência de implementação
02

Referência de design do sistema sistema de design React Suite

Folha de estilos compilada do React Suite 6.2.4, conferida com a documentação atual das variáveis de CSS v6. Os valores abaixo são as primeiras definições/padrões; os aliases semânticos podem ser resolvidos de outra forma em outros temas de provider. As regras originais de layout do calendário são identificadas separadamente.

Tipografia

Fonte
Nome / RegraValor / ConfiguraçãoUso
--rs-font-family-base-apple-system, BlinkMacSystemFont, Arial, Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", STXihei, sans-serifPilha de fontes do sistema com alternativas para CJK.
--rs-html-font-size16pxTamanho da raiz.
--rs-font-size-sm0.875rem14px com raiz de 16px; escala padrão do corpo do texto.
--rs-font-size-md1rem16px na raiz padrão.
--rs-font-size-lg1.125rem18px na raiz padrão.
--rs-font-size-xl1.25rem20px na raiz padrão.
--rs-font-size-2xl1.5rem24px na raiz padrão.
--rs-line-height-mdcalc(20 / 14)Proporção padrão do corpo do texto.

Espaçamento e raio

Fonte
Nome / RegraValor / ConfiguraçãoUso
--rs-spacing0.25remIncremento básico de espaçamento.
--rs-padding-inline-md12pxPreenchimento horizontal médio dos componentes.
--rs-padding-block-md8pxPreenchimento vertical médio dos componentes.
--rs-radius-sm0.25rem4px na raiz padrão.
--rs-radius-md0.375rem6px na raiz padrão.
--rs-radius-lg0.5rem8px na raiz padrão.
--rs-radius-xl0.75rem12px na raiz padrão.

Escala primária

Fonte
Nome / RegraValor / ConfiguraçãoUso
--rs-primary-50#F2FAFF Nível 50 da paleta primária padrão.
--rs-primary-100#CCE9FF Nível 100 da paleta primária padrão.
--rs-primary-200#A6D7FF Nível 200 da paleta primária padrão.
--rs-primary-300#80C3FF Nível 300 da paleta primária padrão.
--rs-primary-400#59AFFF Nível 400 da paleta primária padrão.
--rs-primary-500#3498ff Nível 500 da paleta primária padrão.
--rs-primary-600#2589F5 Nível 600 da paleta primária padrão.
--rs-primary-700#1675E0 Nível 700 da paleta primária padrão.
--rs-primary-800#0A5DC2 Nível 800 da paleta primária padrão.
--rs-primary-900#004299 Nível 900 da paleta primária padrão.

Superfícies e estados semânticos

Fonte
Nome / RegraValor / ConfiguraçãoUso
--rs-bg-cardvar(--rs-gray-0)Superfície do calendário e da agenda.
--rs-bg-wellvar(--rs-gray-50)Plano de fundo externo da página.
--rs-bg-overlayvar(--rs-gray-0)Superfície do modal.
--rs-text-primaryvar(--rs-gray-800)Texto de leitura normal.
--rs-text-secondaryvar(--rs-gray-600)Metadados e textos auxiliares.
--rs-text-errorvar(--rs-color-red)Mensagem de validação.
--rs-border-primaryvar(--rs-gray-200)Separadores da agenda e limites do painel.
--rs-btn-primary-bgvar(--rs-primary-500)Preenchimento do botão primário.
--rs-btn-primary-textvar(--rs-gray-0)Texto do botão primário.
--rs-state-focus-shadow0 0 0 2px rgb(from var(--rs-primary-500) r g b / 25%)Destaque de foco.

Decisões de composição do calendário

Fonte
Nome / RegraValor / ConfiguraçãoUso
isoWeektrueAs semanas do calendário começam na segunda-feira.
Initial datenew Date(2026, 9, 14)Exemplo fixo de outubro; o mês de JavaScript começa em zero.
Layout switch760pxPonto de quebra original de uma coluna.
Weekend rulegetDay() is 0 or 6Política original de agendamento local, não uma restrição do Calendar.
03

Guia completo do sistema de design React Suite

Um guia prático para escolher, aplicar e avaliar este sistema em uma interface real.

DESIGN-react-suite.md

Orientações completas, um ponto de partida para a implementação e links para o código-fonte.

Baixar o guia

Sistema de design React Suite: um calendário nativo com uma agenda separada

Um calendário nativo com uma agenda separada

React Suite é voltado a aplicativos com muitos componentes e fornece tanto controles quanto superfícies de trabalho maiores, como Calendar. Este exemplo usa a versão 6.2.4 com sua folha de estilos compilada. Um CustomProvider envolve o aplicativo, enquanto Calendar, Panel, Modal e outros componentes são importados de rsuite.

Com base neste guia de OpenDesign

O calendário não finge ser um serviço de agendamento conectado. Ele contém duas sessões de exemplo iniciais e permite adições e remoções locais. O dia selecionado e a lista de registros são estados separados de React, então navegar até um dia não altera a programação. É possível conferir todas as transições de estado no código completo de App.

Consulte a especificação de apoio

Sistema de design React Suite: referência das variáveis de CSS v6

Referência das variáveis de CSS v6

A especificação é baseada na versão v6 instalada de CSS, não em um tutorial antigo de Less. Tipografia, espaçamento, raio, paleta e funções semânticas estão disponíveis como variáveis --rs. O corpo do texto padrão usa o tamanho pequeno, 0.875rem, enquanto a raiz permanece em dezesseis pixels. Essa diferença explica por que uma superfície de controle padrão pode parecer mais densa que um artigo com texto de dezesseis pixels.

A página usa --rs-bg-well como plano de fundo dos painéis --rs-bg-card e --rs-border-primary para os separadores da agenda. Um marcador usa primary-500; um erro de campo usa a função semântica text-error. A referência mantém aliases para texto e superfícies, para que essas funções continuem compreensíveis quando um tema de provider alterar sua resolução.

Consulte a especificação de apoio

Sistema de design React Suite: use a escala da biblioteca ao redor do calendário

Use a escala da biblioteca ao redor do calendário

A escala real de raios inclui valores de quatro, seis, oito e doze pixels para sm a xl na raiz padrão. O incremento básico de espaçamento é 0.25rem. Em vez de tratá-los como uma paleta decorativa, o CSS fornecido usa variáveis reais de superfície e texto na agenda e nos conteúdos auxiliares ao redor.

O título da página usa explicitamente 32px, com altura de linha de 1.2, reduzidos para 28px em telas estreitas. Os títulos das sessões usam dezessete pixels para caber em linhas compactas da agenda. Essas escolhas da página não substituem as variáveis tipográficas globais da biblioteca. Assim, os rótulos do Calendar e os controles do modal mantêm o dimensionamento nativo dos componentes.

Consulte a especificação de apoio

Sistema de design React Suite: controle a data selecionada sem desvios de UTC

Controle a data selecionada sem desvios de UTC

Calendar recebe um valor Date, e onSelect atualiza esse valor selecionado. isoWeek faz a semana visível começar na segunda-feira. O valor inicial fixo usa new Date(2026,9,14), em que nove corresponde a outubro porque os meses de JavaScript começam em zero. A página é um exemplo intencionalmente fixo, não uma afirmação sobre a data de hoje no calendário.

A função de chave usa getFullYear, getMonth e getDate para gerar uma chave local no formato YYYY-MM-DD. Ela evita toISOString().slice(0,10), que converte a data para UTC e pode deslocar o dia do calendário local em alguns fusos horários. Esses registros representam datas sem horário, portanto uma conversão UTC implícita introduziria um significado que os dados não têm.

Consulte a especificação de apoio

Sistema de design React Suite: marcadores de data e conteúdo do dia selecionado

Marcadores de data e conteúdo do dia selecionado

renderCell verifica se os registros locais contêm uma entrada para a data e retorna um pequeno marcador de evento. O marcador é complementar: ao selecionar a data, os títulos reais aparecem na agenda. Um ponto colorido, por si só, não informaria ao usuário o que está programado nem permitiria remover o item correto.

O calendário compacto continua estreito o bastante para a visualização em dispositivos móveis. A agenda é um Panel separado, com cabeçalho de data, cartões de sessão e uma ação local para adicionar itens. No ponto de quebra original de 760px, ela passa para baixo do calendário. Essa disposição evita comprimir títulos completos de eventos em cada célula ou criar um calendário horizontal difícil de ler.

  1. Selecione o dia de exemplo que contém a revisão de navegação.
  2. Confira o título da sessão na agenda, em vez de depender do ponto.
  3. Remova a sessão e confirme que o marcador de data desaparece quando não restam registros.

Consulte a especificação de apoio

Sistema de design React Suite: as regras de agendamento do aplicativo são explícitas

As regras de agendamento do aplicativo são explícitas

O agendamento nos fins de semana é desativado usando os valores zero e seis de getDay(). Ainda é possível selecionar essas datas no calendário, para que a agenda explique a regra em vez de dar a impressão de que o dia está com defeito. Uma mensagem de aviso aparece e o botão de adicionar é desativado. Essa é uma política local da equipe, não uma limitação do Calendar de React Suite.

Em dias úteis sem sessões, uma mensagem específica informa que não há itens, e a ação para adicionar continua disponível. A remoção de uma sessão altera os registros e exibe uma notificação local. Não há a alegação de que algum participante foi notificado. Os objetos Date, o array de registros e a política simples estão visíveis no código-fonte, para que possam ser substituídos deliberadamente em um produto real.

Consulte a especificação de apoio

Sistema de design React Suite: um diálogo objetivo para adicionar itens, com validação

Um diálogo objetivo para adicionar itens, com validação

Ao abrir Adicionar sessão de revisão, o título e qualquer erro anterior são apagados. O Modal usa a composição Header, Title, Body e Footer, com open e onClose controlados pelo estado de React. O campo de entrada tem um rótulo associado, estado inválido e descrição do erro. Se o título tiver menos de três caracteres após remover os espaços das extremidades, o modal permanece aberto e exibe um alerta.

O envio de um título válido adiciona um registro para a data selecionada, fecha o modal e exibe uma mensagem informativa. O componente Modal gerencia o comportamento do diálogo, incluindo Escape e o gerenciamento de foco. Cancelar apenas fecha o rascunho. O aplicativo não fecha o modal antes de confirmar que o título atende à própria regra.

  • Cancelar descarta o título não salvo.
  • O título rejeitado permanece disponível para correção.
  • Um título válido adiciona um registro local e atualiza o marcador do calendário.

Consulte a especificação de apoio

Sistema de design React Suite: carregue os estilos v6 e o aplicativo completo

Carregue os estilos v6 e o aplicativo completo

Instale [email protected] em um projeto React e importe rsuite/dist/rsuite.min.css. O exemplo de App inclui essa importação, seu style.css original e o wrapper CustomProvider. A entrada de configuração usa React createRoot e não depende de uma CDN remota. A prévia independente inclui os mesmos componentes nativos e CSS localmente.

React Suite também oferece uma distribuição de folha de estilos sem reset. Este exemplo usa deliberadamente a folha de estilos padrão; combinar as duas distribuições duplicaria estilos e dificultaria identificar qual reset se aplica à página. Em uma aplicação existente, escolha a distribuição adequada à arquitetura de estilos ao redor e verifique formulários e títulos em conjunto.

Consulte a especificação de apoio

Sistema de design React Suite: um calendário real precisa de estado adicional do domínio

Um calendário real precisa de estado de domínio adicional

Um agendador conectado precisaria de horários, fusos horários, participantes, permissões e um resultado de persistência. Este exemplo de calendário apenas com datas não inventa esses campos nem finge que uma atualização de estado bem-sucedida enviou um convite. O rodapé e os avisos deixam claro o escopo local. A função local de chave de data é adequada para estes registros, mas não é uma estratégia completa para reuniões que consideram fusos horários.

Se adicionar uma solicitação remota, mantenha o modal de rascunho aberto até receber um resultado confirmado ou exiba um erro recuperável. Evite envios duplicados e preserve a data e o título selecionados após uma falha. A biblioteca fornece os elementos básicos da interface; a correção da aplicação depende de vinculá-los à operação real.

Consulte a especificação de apoio

Exemplos de componentes do sistema de design React Suite

Aplicação completa de calendário e agenda

Calendário controlado com marcadores nas células de data, chaves de data locais e fluxo de criação por modal.

jsx
import React,{useState} from 'react';
import {CustomProvider,Calendar,Panel,Button,Modal,Input,Message,Tag} from 'rsuite';
import 'rsuite/dist/rsuite.min.css';
import './style.css';
const key=d=>`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;
export default function App(){const[date,setDate]=useState(new Date(2026,9,14)),[open,setOpen]=useState(false),[title,setTitle]=useState(''),[error,setError]=useState(''),[notice,setNotice]=useState(''),[events,setEvents]=useState([{id:1,date:'2026-10-14',title:'Navigation review'},{id:2,date:'2026-10-16',title:'Prototype handoff'}]);const selected=events.filter(e=>e.date===key(date));const weekend=[0,6].includes(date.getDay());function save(){if(title.trim().length<3){setError('Use at least three characters for the session title.');return;}setEvents([...events,{id:Date.now(),date:key(date),title:title.trim()}]);setOpen(false);setNotice('Added to the local calendar only. No invitation was sent.');}
return <CustomProvider><main className='schedule'><header><div><p className='eyebrow'>REACT SUITE / TEAM CADENCE</p><h1>Give the work a place in the week.</h1><p>Select a day to inspect its sessions. Weekend scheduling is disabled in this example.</p></div><Tag color='blue'>Local calendar</Tag></header>{notice&&<Message type='info' closable onClose={()=>setNotice('')}>{notice}</Message>}<div className='schedule-grid'><Panel bordered className='calendar-panel'><Calendar compact bordered isoWeek value={date} onSelect={setDate} renderCell={d=>events.some(e=>e.date===key(d))?<span className='event-dot' aria-label='Has a session'/>:null}/><p className='calendar-legend'><span className='event-dot'/> A date with one or more local sessions</p></Panel><Panel bordered className='agenda-panel'><p className='eyebrow'>{date.toLocaleDateString('en',{weekday:'long'})}</p><h2>{date.toLocaleDateString('en',{month:'long',day:'numeric',year:'numeric'})}</h2>{weekend&&<Message type='warning'>The sample team does not schedule weekend reviews.</Message>}<div className='agenda'>{selected.length?selected.map(e=><article key={e.id}><div><span className='event-kind'>Review session</span><h3>{e.title}</h3></div><Button appearance='subtle' size='sm' aria-label={'Remove '+e.title} onClick={()=>{setEvents(events.filter(x=>x.id!==e.id));setNotice('Removed from the local calendar. No attendee was notified.')}}>Remove</Button></article>):<div className='empty'><h3>No sessions for this day.</h3><p>Choose another date or add a local review session.</p></div>}</div><Button appearance='primary' disabled={weekend} onClick={()=>{setTitle('');setError('');setOpen(true)}}>Add review session</Button></Panel></div><footer>Native React Suite Calendar, Panel, Modal, Input, Message and Button. All dates are local calendar dates; no remote calendar connection.</footer><Modal open={open} onClose={()=>setOpen(false)} size='sm'><Modal.Header><Modal.Title>Add review session</Modal.Title></Modal.Header><Modal.Body><p>For {key(date)}. This adds a record only in the preview.</p><label htmlFor='session-title'>Session title</label><Input id='session-title' value={title} onChange={v=>{setTitle(v);setError('')}} aria-invalid={!!error} aria-describedby='title-error' autoFocus/>{error&&<p id='title-error' role='alert' className='field-error'>{error}</p>}</Modal.Body><Modal.Footer><Button onClick={()=>setOpen(false)} appearance='subtle'>Cancel</Button><Button onClick={save} appearance='primary'>Add locally</Button></Modal.Footer></Modal></main></CustomProvider>}

Referência de código

  • Os valores de mês em new Date começam em zero.
  • As chaves de data usam os campos do calendário local, em vez de converter para UTC.
  • As restrições para fins de semana são definidas pela aplicação.

Layout responsivo de calendário

Usa variáveis semânticas reais de React Suite em componentes nativos.

css
body{background:var(--rs-bg-well)}.schedule{max-width:1120px;margin:auto;padding:32px;color:var(--rs-text-primary)}header{display:flex;gap:24px;justify-content:space-between;align-items:start;margin-bottom:24px}h1{font-size:32px;line-height:1.2;letter-spacing:-.03em;max-width:650px;margin:8px 0 16px}h2{font-size:24px;line-height:1.3;margin:8px 0 24px}.eyebrow{font-size:11px;letter-spacing:.11em;font-weight:700;color:var(--rs-text-secondary)}.schedule-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:24px;margin-top:20px}.calendar-panel,.agenda-panel{background:var(--rs-bg-card)}.calendar-panel .rs-panel-body{padding:20px}.event-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--rs-primary-500)}.calendar-legend{font-size:12px;color:var(--rs-text-secondary);margin-top:16px}.calendar-legend .event-dot{margin-right:6px}.agenda{margin-bottom:24px}.agenda article{display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid var(--rs-border-primary);padding:20px 0}.agenda h3{font-size:17px;line-height:1.3;margin:6px 0}.event-kind{color:var(--rs-text-secondary);font-size:12px}.empty{padding:24px 0;color:var(--rs-text-secondary)}footer{margin-top:24px;font-size:12px;color:var(--rs-text-secondary)}.field-error{color:var(--rs-text-error);font-size:13px;margin-top:8px}label{display:block;margin-bottom:8px;font-weight:600}@media(max-width:760px){.schedule{padding:20px 16px}.schedule-grid{grid-template-columns:1fr}header{flex-direction:column}h1{font-size:28px}.calendar-panel .rs-panel-body{padding:12px}}

Referência de código

  • O título da página e o breakpoint de 760px são escolhas originais.
04

Configuração do agente do sistema de design React Suite

Ponto de partida para implementação

Exemplo nativo criado com React 19 e React Suite 6.2.4. Não usa serviços externos de calendário. A aplicação completa e os estilos são apresentados acima.

jsx
// Create the project first:
// npm create vite@latest react-suite-specimen -- --template react
// cd react-suite-specimen && npm install
// In a React project:
// npm install [email protected]
// Save the complete App example as App.jsx and the CSS example as style.css.
import React from 'react';
import {createRoot} from 'react-dom/client';
import App from './App.jsx';
createRoot(document.getElementById('root')).render(<App/>);
// index.html needs <div id="root"></div> and the Vite module entry.
// App.jsx imports rsuite/dist/rsuite.min.css and wraps CustomProvider.
// Keep the template index.html and replace its entry with the code above.
// npm run dev

Um prompt para seu projeto

Prompt para agente de IA
Use a composição de calendário e agenda de React Suite 6.2.4 com CustomProvider e a folha de estilos nativa. Preserve a seleção de dias da semana, o comportamento que desativa os fins de semana e o fluxo Modal/Input para um registro de revisão local. Mantenha a data selecionada e os itens da agenda no estado da aplicação, valide as informações da revisão antes de adicioná-la e não altere a agenda em caso de cancelamento. Mantenha o layout responsivo do calendário e a exibição da agenda específica para cada data. Não sugira que há um convite de calendário ou serviço externo de agendamento.
05

Fontes e escopo do sistema de design React Suite

React Suite 6.2.4. Calendário local apenas com datas, política original para fins de semana e registros de exemplo; sem convites ou agendamento externo.