Varejo e comércio eletrônico · Novo recurso

Sistema de design Adeo Mozaic.

Crie uma composição prática de controle de quantidade usando a unidade mágica de 16 px da Mozaic, controles correspondentes de 48 px, imports SCSS reais e classes BEM. O planejador de prateleiras permite observar limites, erros tipados e um resumo local de materiais.

Guia OpenDesign8 capítulos36 itens de referênciaGuia de aplicação original
01

Prévia da interface do sistema de design Adeo Mozaic

Digite ou ajuste uma quantidade, teste os limites e prepare uma lista local de materiais.

Planejador de materiais para prateleirasAbrir exemplo completo
Interpretação offline original de HTML/CSS da unidade mágica e do controle médio de quantidade da Mozaic; ilustração e paleta da aplicação originais, não são CSS nativos da biblioteca. · Referência de implementação
02

Referência de design do sistema sistema de design Adeo Mozaic

Documentação SCSS/BEM da Mozaic: as páginas de fundamentos e instalação indicam v1.85.0; a referência de código de quantidade indica v1.76.0. Estes são contratos de referência documentados, não uma afirmação de que todas as páginas correspondam à versão mais recente do pacote.

Referências da unidade mágica

Fonte
Nome / RegraValor / ConfiguraçãoUso
mu0254pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu0508pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu07512pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu10016pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu12520pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu15024pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu17528pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu20032pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu25040pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu30048pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu35056pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu40064pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu50080pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu60096pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.
mu700112pxReferência de espaçamento em rem; o equivalente em pixels pressupõe a base documentada de 16px.

Dimensões dos botões

Fonte
Nome / RegraValor / ConfiguraçãoUso
Small height32px / 2muControles compactos.
Medium height48px / 3muUse na composição de quantidade para dispositivos móveis.
Large height56px / 3.5muAção grande de alta ênfase.
Text + icon, small / medium24px iconMantenha o ícone e o rótulo equilibrados.
Text + icon, large32px iconBotão grande.
Icon-only, medium / large32px iconControle quadrado.

Hierarquia do corpo do texto

Fonte
Nome / RegraValor / ConfiguraçãoUso
mt-body-m16px regularTexto do corpo padrão.
Small body14pxTamanho mínimo recomendado para texto do corpo em várias linhas.
Large body18pxTamanho máximo recomendado para parágrafos.

Anatomia do componente de quantidade

Fonte
Nome / RegraValor / ConfiguraçãoUso
mc-quantity-selectorWrapperContém dois controles e o campo de entrada.
mc-quantity-selector__inputInput elementAplique também mc-text-input.
mc-quantity-selector__button-leftDecrement elementAplique também mc-button--square e --bordered.
mc-quantity-selector__button-rightIncrement elementAplique também mc-button--square e --bordered.
Small compositionmc-text-input--s + mc-button--sAltere o grupo completo de uma só vez.
is-disabledVisual state classCombine com o atributo disabled nativo para garantir o comportamento esperado.

Construção e personalização

Fonte
Nome / RegraValor / ConfiguraçãoUso
postcssPluginConfig@mozaic-ds/css-dev-tools/postcssPluginConfigLista obrigatória de plugins.
Parserpostcss-scssConsulte o código-fonte SCSS.
Production environmentMOZAIC_ENV=productionAtiva a configuração de plugins para produção.

Utilitários de espaçamento

Fonte
Nome / RegraValor / ConfiguraçãoUso
mu-mb-10016px bottom marginEspaço entre componentes.
mu-pl-0508px left paddingEspaçamento com utilitários.
make-space-util(m, t, 075)Top margin at mu075Gere um utilitário à sua escolha.
03

Adeo Mozaic: guia completo do sistema de design

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

DESIGN-adeo-mozaic.md

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

Baixar o guia

Adeo Mozaic: componentes SCSS do sistema de design com identidade de varejo configurável

ADEO é a organização, não a predefinição padrão

Mozaic fornece estilos-fonte e tokens separadamente das fontes e dos ícones SVG. O tema padrão dos tokens é Leroy Merlin; ADEO é uma predefinição explícita. Portanto, uma prévia original em verde não comprova que essa seja uma cor corporativa oficial da ADEO.

Com base neste guia de OpenDesign

Para usar a predefinição ADEO, crie mozaic.config.js com preset: "adeo" e tokens.localTokensExportPath e, em seguida, execute npx mozaic-tokens-build. Um diretório personalizado de tokens mescla em profundidade os caminhos JSON correspondentes, em vez de substituir valores sem relação com eles. A geração do tema e a estilização dos componentes são etapas distintas do processo de build.

  • styles fornece os componentes SCSS.
  • tokens fornece os formatos de tokens de origem e gerados.
  • web-fonts e icons fornecem recursos separados.
  • css-dev-tools fornece a configuração de build e lint.

Consulte a especificação de apoio

Adeo Mozaic: use a unidade mágica do sistema de design sem limitar a largura dos contêineres de texto

Uma referência baseada em rem de 16px

Na parte menor da escala de Mozaic, os incrementos são de um quarto de unidade; no meio, são de meia unidade; e, nas distâncias maiores, são de unidades inteiras. A tabela de referência apresenta os valores nomeados disponíveis, sem criar um segundo sistema de espaçamento.

O planejador usa espaçamentos de 16px, espaçamento interno de 24px e controles com 48px de altura. Essas escolhas mantêm o componente no mesmo ritmo visual, enquanto permitem que os cartões e textos ao redor cresçam. É melhor definir uma altura mínima para o controle do que cortar um rótulo traduzido ou ampliado dentro de uma caixa de conteúdo com altura fixa.

Consulte a especificação de apoio

Adeo Mozaic: mantenha o texto corrido legível junto a controles compactos no sistema de design

Três tamanhos práticos para o texto corrido

A escala documentada de texto corrido tem como referência principal 16px regular. Para textos com várias linhas, a recomendação mínima é 14px; para parágrafos, a máxima é 18px. A prévia usa uma fonte substituta do sistema e não dá a entender que inclui o pacote de fontes da web de Mozaic.

Use o título maior para nomear o projeto, o texto corrido para explicar o cálculo e uma linha menor de apoio para delimitar o escopo do exemplo. Os valores dos materiais permanecem como texto real, em vez de serem desenhados na ilustração da estante.

Consulte a especificação de apoio

Adeo Mozaic: um componente, três elementos coordenados no sistema de design

O wrapper não gerencia o estado da aplicação

O seletor de quantidade combina um botão quadrado contornado para diminuir, um campo numérico e um botão correspondente para aumentar. Importe os estilos dos três componentes, incluindo text input e button; importar apenas quantity-selector não corresponde à composição documentada.

Para uma variante compacta, altere juntos os tamanhos dos botões e do campo de entrada. As orientações de uso exigem o tamanho médio em breakpoints pequenos, portanto reduzir tudo em um celular é a otimização errada. A prévia mantém os controles de 48px e organiza em pilha os elementos ao redor.

Consulte a especificação de apoio

Adeo Mozaic: a estilização das bordas deve corresponder ao comportamento real no sistema de design

A entrada digitada tem mais estados do que os botões de mais e menos

O exemplo original aceita números inteiros de 1 a 12. Em um, o botão para diminuir fica realmente desativado; em doze, o botão para aumentar fica desativado. A classe is-disabled, por si só, não impediria a ativação pelo teclado. O atributo disabled nativo e a classe visual são mantidos em sincronia.

Um valor vazio ou fracionário digitado não é convertido silenciosamente em uma lista plausível de materiais. Ao enviar, o sistema explica o intervalo aceito e coloca o foco no campo. Uma edição posterior limpa o resultado preparado anteriormente, pois ele correspondia à quantidade anterior. O cálculo da estante usa dados fictícios de exemplo, não é uma recomendação estrutural nem de compra.

  1. Leia o valor digitado sem tratar uma string vazia como zero.
  2. Valide se o valor é inteiro e está no intervalo antes de calcular as quantidades do exemplo.
  3. Atualize os dois botões de limite e o estado acessível de erro.
  4. Crie um resumo local somente após a validação ser aprovada.

Consulte a especificação de apoio

Adeo Mozaic: use uma única ação sólida para o resultado do projeto no sistema de design

Separe o ajuste da quantidade da preparação

O seletor usa controles quadrados contornados e discretos, pois eles alteram um campo de entrada. O botão sólido Preparar lista de materiais age sobre o formulário completo. Dois botões de ação sólidos da mesma cor lado a lado dificultariam essa distinção.

A mensagem resultante deixa explícito que nada foi pedido. Não há estado de carregamento fictício, fluxo de pagamento ou envio pela rede. Um resumo concreto basta para demonstrar a relação entre valores e ações.

Consulte a especificação de apoio

Sistema de design Adeo Mozaic: compile as importações documentadas pelo pipeline de Mozaic

Primeiro as configurações, depois a saída dos componentes

A importação all-settings fornece variáveis, funções e mixins, mas, por si só, não gera nenhum componente CSS. O bundle fornecido importa em seguida text-input, button e quantity-selector. A configuração de plugins fornecida resolve os caminhos de importação de Mozaic e executa as transformações esperadas.

A configuração inclui um executor de CLI do PostCSS, pois o pacote do plugin não fornece um. Em produção, MOZAIC_ENV altera a configuração do plugin. A página de instalação agora exige Node 20+ e recomenda Dart Sass; textos antigos que descrevem Node Sass não devem ser usados como justificativa para instalar o compilador obsoleto.

Consulte a especificação de apoio

Adeo Mozaic: mantenha o espaçamento dos utilitários fora das partes internas dos componentes do sistema de design

Use valores da escala quando o layout for responsabilidade do componente

Os utilitários de margem e preenchimento de Mozaic foram criados para definir o espaçamento entre componentes. Dentro de um componente novo, use as variáveis SCSS da unidade mágica para mantê-lo autocontido. Pode ser necessário descontar a borda da dimensão desejada, como em calc($mu025 - 1px), para preservar o ritmo pretendido.

O exemplo offline não afirma executar CSS nativamente no Mozaic. Ele interpreta as dimensões documentadas e a estrutura do controle de quantidade com cores originais, uma ilustração original de prateleira e uma interação exclusivamente local. O bloco de código separado fornece as classes reais da biblioteca e a integração com o processo de build.

Consulte a especificação de apoio

Exemplos de componentes do sistema de design Adeo Mozaic

Exemplo interativo completo e independente

Salve o documento completo como index.html e abra-o em um navegador. Interpretação offline original da unidade mágica HTML/CSS e do controle de quantidade médio do Mozaic; ilustração e paleta da aplicação originais, não CSS nativo da biblioteca.

html
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>Shelf materials planner</title><style>*{box-sizing:border-box}body{margin:0;background:#f6f5ef;color:#242920;font:16px/1.5 Arial,sans-serif}button,input{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible{outline:3px solid #23682c;outline-offset:4px}header{border-bottom:1px solid #d9ddd1;padding:16px 32px;display:flex;justify-content:space-between;gap:16px}header b{font-size:18px}header span,.note{font-size:14px;color:#5a6154}main{max-width:1056px;margin:auto;padding:32px}h1{font-size:36px;line-height:1.1;letter-spacing:-1px;margin:8px 0 16px}p{margin:0 0 16px}.eyebrow{font-size:12px;letter-spacing:2px;color:#23682c;font-weight:bold}.layout{display:grid;grid-template-columns:1.1fr 1fr;gap:32px}.art{background:#e5eadc;border-radius:4px;min-height:350px;display:grid;place-items:center;position:relative;overflow:hidden}.wall{width:78%;height:220px;background:linear-gradient(90deg,transparent 49.6%,#d8dfcf 50%,transparent 50.4%);position:relative}.board{position:absolute;left:0;right:0;top:130px;height:18px;background:repeating-linear-gradient(0deg,#bd9b6e 0 3px,#c6a477 3px 7px);box-shadow:0 10px 12px #26341b20;transform:skewY(-3deg)}.bracket{position:absolute;top:148px;width:12px;height:62px;background:#727867;transform:skewY(-3deg)}.bracket.a{left:15%}.bracket.b{right:15%}.pot{position:absolute;left:23%;top:58px;width:47px;height:72px;background:#c88462;border-radius:3px 3px 15px 15px}.leaf{position:absolute;width:52px;height:34px;background:#3d6e38;left:4px;top:-22px;border-radius:100% 0 100% 0;transform:rotate(-25deg)}.leaf:after{content:'';position:absolute;width:45px;height:30px;background:#638a47;left:20px;top:-15px;border-radius:0 100% 0 100%;transform:rotate(45deg)}.books{position:absolute;top:48px;right:20%;height:80px;display:flex;gap:4px;align-items:end}.books i{width:18px;height:76px;background:#f4efe4;display:block;border-top:6px solid #7f9673}.books i:nth-child(2){height:88px;background:#d3b795}.books i:nth-child(3){height:68px;background:#718268;transform:rotate(-10deg)}.art small{position:absolute;bottom:16px;left:24px;color:#526448}.panel{background:#fff;padding:24px;border:1px solid #d9ddd1;border-radius:4px}h2{font-size:24px;line-height:1.25;margin:0 0 8px}label{display:block;font-weight:bold;margin:24px 0 8px}.quantity{display:flex;max-width:240px;margin-bottom:8px}.quantity button,.quantity input{height:48px;border:1px solid #727a6a;background:#fff}.quantity button{width:48px;color:#23682c;font-size:24px;flex-shrink:0}.quantity button:first-child{border-radius:4px 0 0 4px}.quantity button:last-child{border-radius:0 4px 4px 0}.quantity input{width:96px;min-width:0;border-left:0;border-right:0;text-align:center;appearance:textfield}.quantity input::-webkit-inner-spin-button{appearance:none}button:disabled{color:#a2a69b;background:#f1f2ed;cursor:default}.materials{margin:24px 0;display:grid;grid-template-columns:repeat(3,1fr);border-block:1px solid #d9ddd1;padding:16px 0}.materials strong{font-size:24px;display:block}.materials span{font-size:14px;color:#62695c}.primary{min-height:48px;padding:12px 24px;background:#23682c;color:#fff;border:0;border-radius:4px;width:100%;font-weight:bold}.error{color:#ac2323;margin:8px 0;font-size:14px}.result{margin-top:16px;background:#eaf3e2;padding:16px;border-left:4px solid #23682c}.result:empty{display:none}footer{padding-top:24px;font-size:14px;color:#62695c}@media(max-width:650px){header{padding:16px}header span{max-width:140px}main{padding:24px 16px}h1{font-size:32px}.layout{grid-template-columns:1fr;gap:16px}.art{min-height:260px}.panel{padding:24px}.materials{gap:12px}}
</style><header><b>PROJECT WORKSHOP</b><span>Original Mozaic interpretation</span></header><main><p class="eyebrow">SMALL PROJECT · BIG DIFFERENCE</p><h1>Make room for what matters.</h1><p>Plan a simple shelf arrangement and prepare its sample materials list.</p><div class="layout"><div class="art" role="img" aria-label="Original illustration of a wooden shelf with books and a potted plant"><div class="wall"><div class="board"></div><div class="bracket a"></div><div class="bracket b"></div><div class="pot"><div class="leaf"></div></div><div class="books"><i></i><i></i><i></i></div></div><small>Original shelf illustration</small></div><form class="panel" id="planner" novalidate><h2>Your shelf project</h2><p class="note">Each sample shelf uses one board, two brackets and four screws.</p><label for="quantity">Number of shelves</label><div class="quantity"><button id="minus" type="button" aria-label="Remove one shelf" aria-controls="quantity">−</button><input id="quantity" type="number" min="1" max="12" step="1" required value="2" aria-describedby="hint error"><button id="plus" type="button" aria-label="Add one shelf" aria-controls="quantity">+</button></div><p class="note" id="hint">Choose a whole number from 1 to 12.</p><p class="error" id="error" role="alert"></p><div class="materials" aria-live="polite"><div><strong id="boards">2</strong><span>Boards</span></div><div><strong id="brackets">4</strong><span>Brackets</span></div><div><strong id="screws">8</strong><span>Screws</span></div></div><button type="submit" class="primary">Prepare materials list</button><div id="result" class="result" role="status"></div></form></div><footer>Local interaction example. No order is placed. Sample quantities are illustrative, not structural guidance.</footer></main><script>const input=document.querySelector('#quantity'),minus=document.querySelector('#minus'),plus=document.querySelector('#plus'),error=document.querySelector('#error'),result=document.querySelector('#result');function number(){return input.value.trim()===''?NaN:Number(input.value)}function valid(n){return Number.isInteger(n)&&n>=1&&n<=12}function update(show=false){const n=number(),ok=valid(n);result.textContent='';minus.disabled=ok&&n===1;plus.disabled=ok&&n===12;input.setAttribute('aria-invalid',String(!ok&&show));error.textContent=!ok&&show?'Enter a whole number from 1 to 12.':'';document.querySelector('#boards').textContent=ok?n:'—';document.querySelector('#brackets').textContent=ok?n*2:'—';document.querySelector('#screws').textContent=ok?n*4:'—';return ok}minus.onclick=()=>{input.value=String(Math.max(1,(valid(number())?number():1)-1));update()};plus.onclick=()=>{input.value=String(Math.min(12,(valid(number())?number():0)+1));update()};input.oninput=()=>update();document.querySelector('#planner').onsubmit=e=>{e.preventDefault();if(!update(true)){input.focus();return}result.textContent=`Local list prepared: ${number()} boards, ${number()*2} brackets and ${number()*4} screws. Nothing was ordered.`};update();</script></html>

Referência de código

  • As quantidades de prateleiras geram uma lista de materiais, não um pedido. A marcação nativa requer a saída do PostCSS documentada do Mozaic; este documento independente inclui seus próprios estilos de interpretação.

Quantidade limitada de prateleiras e lista de materiais derivada

Classes reais do Mozaic envolvem um campo numérico nativo. O JavaScript original fornece validação de números inteiros, desativação nos limites e um resumo exclusivamente local.

html
<!doctype html>
<html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="./mozaic.css"><title>Shelf materials</title>
<main><h1>Plan a shelf project</h1>
<form id="planner" novalidate>
<label for="quantity">Number of shelves</label>
<p id="hint">Choose 1 to 12. Each sample shelf needs two brackets and four screws.</p>
<div class="mc-quantity-selector">
<button type="button" id="minus" class="mc-button mc-button--square mc-button--bordered mc-quantity-selector__button-left" aria-controls="quantity" aria-label="Remove one shelf">−</button>
<input id="quantity" name="quantity" class="mc-text-input mc-quantity-selector__input" type="number" min="1" max="12" step="1" value="2" required aria-describedby="hint error">
<button type="button" id="plus" class="mc-button mc-button--square mc-button--bordered mc-quantity-selector__button-right" aria-controls="quantity" aria-label="Add one shelf">+</button>
</div>
<p id="error" role="alert"></p><p id="counts" aria-live="polite"></p>
<button type="submit" class="mc-button">Prepare materials list</button>
<p id="result" role="status"></p></form></main>
<script>
const input=document.querySelector('#quantity'), minus=document.querySelector('#minus'), plus=document.querySelector('#plus');
const error=document.querySelector('#error'), counts=document.querySelector('#counts'), result=document.querySelector('#result');
function number(){return input.value.trim()===''?NaN:Number(input.value);}
function valid(n){return Number.isInteger(n)&&n>=1&&n<=12;}
function update(showError=false){
 const n=number(),ok=valid(n); result.textContent='';
 minus.disabled=ok&&n===1; plus.disabled=ok&&n===12;
 minus.classList.toggle('is-disabled',minus.disabled);plus.classList.toggle('is-disabled',plus.disabled);
 input.setAttribute('aria-invalid',String(!ok&&showError));
 error.textContent=!ok&&showError?'Enter a whole number from 1 to 12.':'';
 counts.textContent=ok?`${n} boards · ${n*2} brackets · ${n*4} screws`:'Enter a quantity to calculate materials.';
 return ok;
}
minus.onclick=()=>{input.value=String(Math.max(1,(valid(number())?number():1)-1));update();};
plus.onclick=()=>{input.value=String(Math.min(12,(valid(number())?number():0)+1));update();};
input.oninput=()=>update();
document.querySelector('#planner').onsubmit=e=>{e.preventDefault();if(!update(true)){input.focus();return;}result.textContent=`Local list prepared: ${number()} boards, ${number()*2} brackets and ${number()*4} screws. Nothing was ordered.`;};
update();
</script></html>

Referência de código

  • Os dois botões do controle incremental usam type="button" para nunca enviarem o formulário.
  • Os atributos nativos min/max/step continuam válidos, enquanto a validação personalizada trata entradas vazias e fracionárias.
  • Alterar uma quantidade invalida o resumo preparado anteriormente.
04

Configuração do agente de IA do sistema de design Adeo Mozaic

Ponto de partida para implementação

Fluxo de trabalho público de SCSS com a configuração documentada do PostCSS. Salve o exemplo HTML em public/index.html. O build do pacote nativo não foi executado aqui; a prévia offline é uma interpretação independente. As instruções atuais de instalação usam Dart Sass, substituindo a referência a Node Sass na página mais antiga do PostCSS.

texto
# Node 20+. Use a CommonJS project for this configuration.
npm install @mozaic-ds/styles sass
npm install --save-dev @mozaic-ds/css-dev-tools postcss postcss-cli postcss-scss
# Save the configuration and SCSS below, then build:
npx postcss src/bundle.scss --output public/mozaic.css
# Production build on a POSIX shell:
MOZAIC_ENV=production npx postcss src/bundle.scss --output public/mozaic.css

// postcss.config.js
module.exports = {
  syntax: require('postcss-scss'),
  plugins: require('@mozaic-ds/css-dev-tools/postcssPluginConfig')
};

// src/bundle.scss — settings must precede components.
@import 'settings-tools/all-settings';
@import 'components/c.text-input';
@import 'components/c.button';
@import 'components/c.quantity-selector';

Um prompt para seu projeto

Prompt para agente de IA
Crie uma composição SCSS do Mozaic usando settings-tools/all-settings antes de text-input, button e quantity-selector. Adapte os controles médios de 48 px para telas pequenas, desative nativamente os botões nos limites, valide números inteiros digitados e gere um resumo exclusivamente local. Use o pipeline documentado do PostCSS e diferencie o tema padrão do Leroy Merlin da predefinição ADEO.
05

Fontes e escopo do sistema de design Adeo Mozaic

Referência independente OpenDesign ao Mozaic. O exemplo não é uma loja do ADEO ou do Leroy Merlin, um pedido real nem uma orientação estrutural. Os registros da documentação apresentam rótulos de versão diferentes.