Software empresarial · Novo recurso

Sistema de design Salesforce Lightning.

Um guia de referência do Lightning para trabalhar com registros densos: espaçamento, tipografia e cores semânticas reais, espaço de trabalho editável para casos, validação de campos e histórico de atividades que reflete as alterações locais.

Guia OpenDesign8 capítulos40 entradas de referênciaGuia de aplicação original
01

Prévia da interface do sistema de design Salesforce Lightning

Altere a prioridade ou o status, valide uma nota de atualização, salve um registro de atividade local e descarte um rascunho posterior sem alterar o registro salvo.

Edite um caso e confira a atividade localAbrir exemplo completo
CSS nativo do SLDS 2.264.1 e recursos do pacote; implementação original e acessível de HTML e JavaScript. Sem API do Salesforce nem ambiente de execução do Lightning. · Referência de implementação
02

Referência de design do sistema de design Salesforce Lightning

CSS nativo publicado do @salesforce-ux/design-system 2.264.1 e exportação de tokens ui-force. Esta é uma referência fixada ao blueprint clássico, não uma alegação de compatibilidade com a linguagem de design mais recente do SLDS 2 nem com um ambiente de execução do Lightning Web Components. O repositório histórico upstream está arquivado.

Superfícies de registro e texto semântico

Fonte
Nome / RegraValor / ConfiguraçãoUso
COLOR_BACKGROUNDrgb(243, 243, 243)Referência do pacote publicado. Preserve a função indicada para texto, superfície ou ação, em vez de aplicar a mesma cor de marca a tudo.
COLOR_BACKGROUND_ALTrgb(255, 255, 255)Referência do pacote publicado. Preserve a função indicada para texto, superfície ou ação, em vez de aplicar a mesma cor de marca a tudo.
COLOR_TEXT_DEFAULTrgb(3, 45, 96)Referência do pacote publicado. Preserve a função indicada para texto, superfície ou ação, em vez de aplicar a mesma cor de marca a tudo.
COLOR_TEXT_WEAKrgb(116, 116, 116)Referência do pacote publicado. Preserve a função indicada para texto, superfície ou ação, em vez de aplicar a mesma cor de marca a tudo.
COLOR_BORDERrgb(201, 201, 201)Referência do pacote publicado. Preserve a função indicada para texto, superfície ou ação, em vez de aplicar a mesma cor de marca a tudo.
COLOR_BORDER_ERRORrgb(234, 0, 30)Referência do pacote publicado. Preserve a função indicada para texto, superfície ou ação, em vez de aplicar a mesma cor de marca a tudo.
COLOR_BORDER_SELECTIONrgb(1, 118, 211)Referência do pacote publicado. Preserve a função indicada para texto, superfície ou ação, em vez de aplicar a mesma cor de marca a tudo.
COLOR_BACKGROUND_BUTTON_BRANDrgb(1, 118, 211)Referência do pacote publicado. Preserve a função indicada para texto, superfície ou ação, em vez de aplicar a mesma cor de marca a tudo.
COLOR_BACKGROUND_BUTTON_BRAND_HOVERrgb(1, 68, 134)Referência do pacote publicado. Preserve a função indicada para texto, superfície ou ação, em vez de aplicar a mesma cor de marca a tudo.
COLOR_BACKGROUND_BUTTON_BRAND_ACTIVErgb(3, 45, 96)Referência do pacote publicado. Preserve a função indicada para texto, superfície ou ação, em vez de aplicar a mesma cor de marca a tudo.

Escala clássica de espaçamento

Fonte
Nome / RegraValor / ConfiguraçãoUso
SPACING_X_SMALL0.5remExportação clássica SPACING_*. Não é o conjunto VAR_SPACING_* compacto e separado.
SPACING_XXX_SMALL0.125remExportação clássica SPACING_*. Não é o conjunto VAR_SPACING_* compacto e separado.
SPACING_XX_SMALL0.25remExportação clássica SPACING_*. Não é o conjunto VAR_SPACING_* compacto e separado.
SPACING_SMALL0.75remExportação clássica SPACING_*. Não é o conjunto VAR_SPACING_* compacto e separado.
SPACING_MEDIUM1remExportação clássica SPACING_*. Não é o conjunto VAR_SPACING_* compacto e separado.
SPACING_NONE0Exportação clássica SPACING_*. Não é o conjunto VAR_SPACING_* compacto e separado.
SPACING_X_LARGE2remExportação clássica SPACING_*. Não é o conjunto VAR_SPACING_* compacto e separado.
SPACING_XX_LARGE3remExportação clássica SPACING_*. Não é o conjunto VAR_SPACING_* compacto e separado.
SPACING_LARGE1.5remExportação clássica SPACING_*. Não é o conjunto VAR_SPACING_* compacto e separado.

Escala tipográfica

Fonte
Nome / RegraValor / ConfiguraçãoUso
FONT_SIZE_10.625remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.
FONT_SIZE_20.75remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.
FONT_SIZE_30.8125remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.
FONT_SIZE_40.875remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.
FONT_SIZE_51remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.
FONT_SIZE_61.125remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.
FONT_SIZE_71.25remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.
FONT_SIZE_81.5remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.
FONT_SIZE_91.75remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.
FONT_SIZE_102remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.
FONT_SIZE_112.625remEscolha o tamanho do texto conforme a função, mantendo legíveis as notas do caso e os rótulos dos campos.

Raio dos cantos

Fonte
Nome / RegraValor / ConfiguraçãoUso
BORDER_RADIUS_SMALL0.125remReferência publicada de raio. Um marcador de status circular é diferente de um controle de formulário retangular.
BORDER_RADIUS_MEDIUM0.25remReferência publicada de raio. Um marcador de status circular é diferente de um controle de formulário retangular.
BORDER_RADIUS_LARGE0.5remReferência publicada de raio. Um marcador de status circular é diferente de um controle de formulário retangular.
BORDER_RADIUS_CIRCLE50%Referência publicada de raio. Um marcador de status circular é diferente de um controle de formulário retangular.

Estrutura do blueprint nativo de CSS

Fonte
Nome / RegraValor / ConfiguraçãoUso
slds-page-headerRecord contextMantenha a identificação e o resumo do caso acima do formulário de edição.
slds-cardGrouped content regionOs detalhes e a atividade do caso usam regiões semânticas distintas.
slds-form-elementLabel + control + helpAgrupe cada valor editável em um campo coerente.
slds-has-errorInvalid field modifierDefina ao lado de aria-invalid e de uma mensagem de erro específica.
slds-button_brandPrimary actionSalve a atualização local; a classe fornece estilos, não persistência.
slds-button_neutralSecondary actionDescarte o rascunho e restaure os últimos valores salvos localmente.
03

Guia completo do sistema de design Salesforce Lightning

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

DESIGN-salesforce-lightning.md

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

Baixar o guia

Layout e contexto do registro no sistema de design Salesforce Lightning

Mantenha a identificação do registro acima das tarefas locais

O cabeçalho da página exibe o número do caso, o assunto, a conta e o responsável. Esses valores identificam o registro antes de o usuário alterar qualquer campo. O selo de status resume o registro local salvo, por isso muda ao salvar, e não acompanha um valor selecionado ainda não confirmado.

Com base neste guia de OpenDesign

Separe os detalhes da atividade

A região mais ampla reúne o contexto do cliente e o formulário de edição. A região secundária contém um histórico ordenado. Essa separação permite comparar o trabalho solicitado com as alterações já registradas sem navegar para outra tela. No layout para dispositivos móveis, essas regiões são empilhadas na mesma ordem semântica.

Salesforce Lightning Cores semânticas e estados do sistema de design

Interprete os nomes dos tokens como papéis

A exportação ui-force diferencia texto padrão, texto secundário, bordas de seleção e fundos de botões da marca. O exemplo mantém o texto principal escuro, os metadados discretos e a ação principal azul. O vermelho é usado no campo inválido e na mensagem de recuperação correspondente, não em todo valor não salvo.

Não dependa apenas da cor para indicar o estado

A prioridade e o status aparecem por extenso no resumo e na nova entrada de atividade. O estado de erro combina o modificador nativo slds-has-error com aria-invalid e uma mensagem associada à área de texto. A confirmação local aparece em uma região de status; apenas um destaque verde não informaria ao usuário o que foi salvo.

Salesforce Lightning Escala tipográfica e densidade de registros do sistema de design

Use hierarquia sem títulos exagerados

A escala tipográfica numerada publicada começa em 0.625rem e vai até 2.625rem. Um espaço de trabalho de casos não precisa usar o maior tamanho de exibição em todas as regiões. O título nativo do cabeçalho da página identifica o registro, os títulos dos cartões distinguem as áreas e o texto do corpo apresenta a solicitação do cliente e a observação.

Mantenha os assuntos longos dos registros intactos

O layout personalizado permite que o título da página quebre em várias linhas, em vez de truncar o assunto em uma largura reduzida. Os metadados também podem ocupar linhas adicionais. Não reduza todo o texto para acomodar o nome longo de uma conta; teste assuntos e nomes de responsáveis com comprimentos realistas antes de decidir onde truncar com segurança e oferecer uma alternativa que exiba o texto completo.

Salesforce Lightning Espaçamento e estrutura de blueprint do sistema de design

Não misture as exportações clássica e variável de espaçamento

Este guia lista SPACING_* de ui-force. A exportação separada var-spacing contém valores compactos diferentes; VAR_SPACING_MEDIUM não equivale a SPACING_MEDIUM. Misturar valores com base apenas em nomes parecidos pode deixar o formulário irregular. Escolha o sistema de densidade desejado e mantenha a respectiva origem.

Use o contêiner do campo de maneira consistente

Salesforce Lightning Comportamento de rascunhos e registros salvos no sistema de design

Mantenha o registro salvo separado dos controles

O script mantém a última prioridade e o último status salvos em um objeto de registro. A edição dos campos de seleção altera apenas o rascunho. Ao salvar, os valores são copiados para esse objeto, o resumo é atualizado e um item de atividade é adicionado. Assim, descartar o rascunho continua fazendo sentido mesmo após várias edições salvas.

Não simule sucesso no backend

O exemplo não inclui busca por ID de registro, modelo de permissões, API nem banco de dados. O botão e a confirmação deixam explícito que a operação é local. Uma integração de produção com Salesforce precisaria das APIs de dados apropriadas e das respostas do servidor antes de atualizar o status definitivo de um registro. As classes CSS não oferecem essas garantias.

Salesforce Lightning Validação de campos e atividade do sistema de design

Faça a observação explicar a alteração

A regra definida exige dez caracteres após a remoção de espaços nas extremidades e limita a área de texto a 300 caracteres. Uma observação vazia ou curta impede qualquer alteração no registro, exibe o erro do campo e move o foco para a observação. A edição limpa o erro desatualizado; ao salvar novamente, o valor atual é validado mais uma vez.

  1. Tente enviar sem uma observação e confirme que os valores do resumo salvo não mudam.
  2. Digite uma observação útil, salve e confira a entrada de atividade mais recente.
  3. Altere os campos novamente, descarte o rascunho e confirme que os últimos valores salvos foram restaurados.

Adicione uma entrada de alteração fácil de ler

Uma atualização local bem-sucedida cria um título de atividade com base no status e na prioridade salvos, seguido da observação exata como conteúdo de texto. A nova entrada é inserida no início, para que a alteração mais recente apareça primeiro. A observação nunca é interpretada como HTML, e a atividade inicial estática permanece abaixo das entradas locais do usuário.

Salesforce Lightning Formulários acessíveis e recuperação no sistema de design

Use rótulos reais e descrições explícitas

Os campos de seleção e a área de texto têm rótulos visíveis associados por meio de for e id. A observação referencia os textos de ajuda e de erro, e o indicador de campo obrigatório tem um título legível. As ações principal e de descarte são botões com os tipos submit e button apropriados, evitando um envio acidental quando o usuário descarta um rascunho.

Após descartar, retorne a um ponto previsível

Descartar restaura a prioridade e o status salvos, limpa a observação e o erro do campo e move o foco para o controle de prioridade. A ação não exclui o histórico de atividades nem redefine o registro ao estado inicial. Essa distinção é importante quando o usuário salva uma alteração, experimenta outra e cancela esse segundo rascunho.

Salesforce Lightning Integração e escopo de versão do sistema de design CSS

Instale o pacote de estilos publicado

O código-fonte completo importa a distribuição CSS com versão fixada e uma pequena folha de estilos da aplicação. O Vite resolve os URLs das fontes e imagens do pacote. Em seguida, HTML e JavaScript fornecem o comportamento do registro; esta é uma implementação de blueprint CSS, não um wrapper em torno de lightning-record-edit-form.

  • O pacote nativo CSS fornece a aparência dos campos, botões e cartões.
  • O HTML original fornece a estrutura e os rótulos do registro.
  • O JavaScript original controla o estado do rascunho, a validação e a atividade local.

Trate o código-fonte arquivado como uma referência versionada

Salesforce Lightning Exemplos de componentes do sistema de design

index.html — espaço de trabalho completo para casos

Resumo do registro, formulário e atividade inicial com semântica HTML.

html
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Local case workspace</title>
<body>
<main class="slds-example">
  <header class="slds-page-header">
    <p class="slds-text-title_caps">Service workspace · fictional record</p>
    <div class="record-title">
      <div>
        <h1 class="slds-page-header__title">
          Case 004218 · Delivery address update
        </h1>
        <p class="slds-text-body_small">
          Northstar Studio · Opened today · Owner: Maya Chen
        </p>
      </div>
      <span id="status-badge" class="slds-badge">New</span>
    </div>
  </header>
  <div class="record-grid">
    <section class="slds-card">
      <div class="slds-card__header">
        <h2 class="slds-card__header-title">Case details</h2>
      </div>
      <div class="slds-card__body slds-card__body_inner">
        <div class="summary">
          <div>
            <span class="slds-text-title">Contact</span>
            <p>Alex Morgan</p>
          </div>
          <div>
            <span class="slds-text-title">Channel</span>
            <p>Email</p>
          </div>
          <div>
            <span class="slds-text-title">Priority</span>
            <p id="read-priority">Medium</p>
          </div>
          <div>
            <span class="slds-text-title">Status</span>
            <p id="read-status">New</p>
          </div>
        </div>
        <div class="slds-box slds-theme_shade slds-m-top_medium">
          <h3 class="slds-text-heading_small">Customer request</h3>
          <p class="slds-m-top_small">
            Please update the delivery location for order NS-1842 before it
            leaves the warehouse. The contact is available to confirm the new
            address.
          </p>
        </div>
        <form id="case-form" class="slds-m-top_large" novalidate>
          <h3 class="slds-text-heading_small slds-m-bottom_medium">
            Update the local case
          </h3>
          <div class="field-grid">
            <div class="slds-form-element">
              <label class="slds-form-element__label" for="priority"
                >Priority</label
              >
              <div class="slds-form-element__control">
                <div class="slds-select_container">
                  <select class="slds-select" id="priority">
                    <option>Low</option>
                    <option selected>Medium</option>
                    <option>High</option>
                  </select>
                </div>
              </div>
            </div>
            <div class="slds-form-element">
              <label class="slds-form-element__label" for="case-status"
                >Status</label
              >
              <div class="slds-form-element__control">
                <div class="slds-select_container">
                  <select class="slds-select" id="case-status">
                    <option>New</option>
                    <option>Working</option>
                    <option>Escalated</option>
                    <option>Closed</option>
                  </select>
                </div>
              </div>
            </div>
          </div>
          <div id="note-field" class="slds-form-element slds-m-top_medium">
            <label class="slds-form-element__label" for="case-note"
              ><abbr class="slds-required" title="required">*</abbr> Update
              note</label
            >
            <div class="slds-form-element__control">
              <textarea
                class="slds-textarea"
                id="case-note"
                rows="3"
                maxlength="300"
                aria-describedby="note-help note-error"
              ></textarea>
            </div>
            <p id="note-help" class="slds-form-element__help">
              Explain the change in 10–300 characters. Nothing is sent to
              Salesforce.
            </p>
            <p id="note-error" class="slds-form-element__help" hidden>
              Enter an update note of at least 10 characters.
            </p>
          </div>
          <div class="form-actions">
            <button
              type="button"
              id="cancel"
              class="slds-button slds-button_neutral"
            >
              Discard draft</button
            ><button type="submit" class="slds-button slds-button_brand">
              Save local update
            </button>
          </div>
          <p id="save-result" class="slds-m-top_small" role="status"></p>
        </form>
      </div>
    </section>
    <aside class="slds-card">
      <div class="slds-card__header">
        <h2 class="slds-card__header-title">Case activity</h2>
      </div>
      <div class="slds-card__body slds-card__body_inner">
        <p class="slds-text-body_small slds-m-bottom_medium">
          Newest updates first
        </p>
        <ol id="activity" class="activity">
          <li>
            <span class="activity-dot"></span>
            <div>
              <h3 class="slds-text-heading_small">Case opened</h3>
              <p>Customer requested a delivery address change.</p>
              <small>Initial example activity</small>
            </div>
          </li>
        </ol>
      </div>
    </aside>
  </div>
  <footer>
    Native SLDS 2.264.1 CSS with original HTML and JavaScript. Local
    demonstration; no Salesforce record or message is created.
  </footer>
</main>

<script type="module" src="/src/main.js"></script>
</body></html>

Referência de código

  • Salve na raiz do projeto Vite.

main.js — rascunho, validação e atividade

Comportamento completo da aplicação e importação nativa de CSS.

js
import "@salesforce-ux/design-system/assets/styles/salesforce-lightning-design-system.css";
import "./slds.css";
let record = { priority: "Medium", status: "New" };
const form = document.querySelector("#case-form"),
  priority = document.querySelector("#priority"),
  status = document.querySelector("#case-status"),
  note = document.querySelector("#case-note"),
  field = document.querySelector("#note-field"),
  error = document.querySelector("#note-error"),
  result = document.querySelector("#save-result");
function clearError() {
  field.classList.remove("slds-has-error");
  error.hidden = true;
  note.removeAttribute("aria-invalid");
  result.textContent = "";
}
form.addEventListener("input", clearError);
form.addEventListener("submit", (e) => {
  e.preventDefault();
  const text = note.value.trim();
  if (text.length < 10) {
    field.classList.add("slds-has-error");
    error.hidden = false;
    note.setAttribute("aria-invalid", "true");
    note.focus();
    return;
  }
  record = { priority: priority.value, status: status.value };
  document.querySelector("#read-priority").textContent = record.priority;
  document.querySelector("#read-status").textContent = record.status;
  document.querySelector("#status-badge").textContent = record.status;
  const li = document.createElement("li"),
    dot = document.createElement("span"),
    body = document.createElement("div"),
    h = document.createElement("h3"),
    p = document.createElement("p"),
    small = document.createElement("small");
  dot.className = "activity-dot";
  h.className = "slds-text-heading_small";
  h.textContent = record.status + " · " + record.priority + " priority";
  p.textContent = text;
  small.textContent = "Local update · this session";
  body.append(h, p, small);
  li.append(dot, body);
  document.querySelector("#activity").prepend(li);
  note.value = "";
  clearError();
  result.textContent = "Local case updated. No server request was made.";
});
document.querySelector("#cancel").addEventListener("click", () => {
  priority.value = record.priority;
  status.value = record.status;
  note.value = "";
  clearError();
  priority.focus();
});

Referência de código

  • Salve como src/main.js. Todas as atualizações permanecem locais.

slds.css — composição responsiva

Apenas a grade original do registro, a decoração do histórico e o layout para dispositivos móveis.

css
[hidden] { display: none !important; }
body {
  margin: 0;
}
.slds-example {
  background: #f3f3f3;
  padding: 24px;
  min-height: 680px;
}
.record-title {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 24px;
  margin-top: 12px;
}
.record-title h1 {
  white-space: normal;
}
.record-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.7fr) minmax(260px, 1fr);
  gap: 20px;
  margin-top: 20px;
}
.record-grid > .slds-card {
  margin: 0;
  min-width: 0;
}
.summary,
.field-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
.summary p {
  font-weight: 600;
  margin-top: 4px;
}
.form-actions {
  display: flex;
  justify-content: flex-end;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 20px;
}
.activity {
  list-style: none;
  padding: 0;
  margin: 0;
}
.activity li {
  display: flex;
  gap: 12px;
  padding-bottom: 24px;
  position: relative;
}
.activity li:not(:last-child):before {
  content: "";
  position: absolute;
  left: 5px;
  top: 12px;
  bottom: 0;
  border-left: 1px solid #c9c9c9;
}
.activity-dot {
  flex: none;
  width: 11px;
  height: 11px;
  background: #0176d3;
  border-radius: 50%;
  margin-top: 5px;
}
.activity p {
  margin: 8px 0;
}
.activity small {
  color: #747474;
}
.slds-example footer {
  font-size: 12px;
  color: #747474;
  margin-top: 20px;
}
.slds-form-element.slds-has-error #note-help {
  color: #444;
}
@media (max-width: 760px) {
  .slds-example {
    padding: 12px;
  }
  .record-grid {
    grid-template-columns: 1fr;
  }
  .record-title {
    gap: 12px;
  }
  .field-grid {
    grid-template-columns: 1fr;
  }
  .form-actions {
    justify-content: flex-start;
  }
}

Referência de código

  • Salve como src/slds.css; os estilos do pacote permanecem separados.
04

Salesforce Lightning Configuração de agente do sistema de design

Ponto de partida para implementação

Exemplo de CSS nativo com versão fixada; não é uma implantação em uma organização Salesforce. Ao redistribuir os recursos incluídos no pacote, mantenha os avisos sobre o pacote e os recursos.

sh
npm create vite@latest slds-case -- --template vanilla
cd slds-case
npm install
npm install @salesforce-ux/[email protected]
# Replace index.html; add src/main.js and src/slds.css from the complete examples.
npm run dev

Um prompt para seu projeto

Prompt para agente de IA
Crie um espaço de trabalho focado em casos usando os blueprints CSS do SLDS com versão fixada. Mantenha distintas a identidade do registro, o contexto do cliente, o estado salvo e o rascunho em edição. Use a estrutura exata dos campos, referências reais a tokens e o código-fonte completo apresentado aqui. Valide a observação antes de alterar o resumo, preserve a atividade local após descartar e não sugira que há uma conexão com o backend do Salesforce.
05

Salesforce Lightning Fontes e escopo do sistema de design

Guia de OpenDesign para o pacote CSS do SLDS com versão fixada. A prévia usa CSS nativo com HTML e JavaScript originais, dados fictícios de casos e estado local. Ela não carrega Lightning Web Components nem se conecta ao Salesforce. O repositório upstream está arquivado; para trabalhos em produção, avalie as orientações atuais da plataforma Salesforce.