Design de produto empresarial · Novo recurso

Sistema de design Siemens iX.

Inspecione eventos industriais com um vocabulário explícito de níveis de gravidade, funções de cor adaptadas ao tema e o iX Event List API. Este guia cria um caderno local de equipamentos sem confundir um registro revisado com um alarme de máquina resolvido.

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

Prévia da interface do sistema de design Siemens iX

Filtre eventos fictícios, inspecione uma observação sobre equipamento e marque um registro como revisado localmente, mantendo visível a gravidade original.

Caderno de eventos de equipamentosAbrir exemplo completo
Interpretação independente e offline de HTML/CSS. Paleta original, fonte do sistema e dimensões do aplicativo; não é o ambiente de execução nativo do iX. · Referência de implementação
02

Referência de design do sistema de design Siemens iX

Documentação pública atual do iX e captura oficial do componente API da branch principal. As entradas de cor abaixo são papéis semânticos, não valores hexadecimais fixos inventados. As versões dos pacotes instalados devem ser compatíveis entre si; o exemplo offline usa uma paleta e dimensões próprias, claramente identificadas.

Tema e entrada de pacotes

Fonte
Nome / RegraValor / ConfiguraçãoUso
Core package@siemens/ixWeb components e folha de estilos global.
React wrappers@siemens/ix-reactIntegração do componente React.
Icons@siemens/ix-iconsDependência oficial de ícones.
data-ix-themeclassicSeletor de tema no nível do documento.
data-ix-color-schemadark | light | systemA grafia exata do atributo segue o esquema.
Global CSS@siemens/ix/dist/siemens-ix/siemens-ix.cssImporte uma vez na entrada do aplicativo.

Papéis de leitura e superfície

Fonte
Nome / RegraValor / ConfiguraçãoUso
--theme-color-primaryPrimary action roleResolva conforme o tema escolhido.
--theme-color-std-textDefault reading colorTítulos de eventos e texto do corpo.
--theme-color-soft-textSecondary reading colorHorários e metadados de recursos.
--theme-color-weak-textDisabled reading colorNão use para informações secundárias importantes.
--theme-color-alarm-textAlarm text roleUse quando o texto de erro precisar de uma cor de primeiro plano.
--theme-color-component-1Interactive component fillSemitransparente; a superfície subjacente influencia sua aparência.
color-0Transparent background roleOs outros níveis de fundo são opacos.

Terminologia de gravidade

Fonte
Nome / RegraValor / ConfiguraçãoUso
AlarmError, invalid or dangerous conditionMantenha o rótulo textual junto ao marcador colorido.
CriticalBetween alarm and warningUm significado distinto, não apenas outro tom decorativo.
WarningCondition requiring attentionNão o transforme silenciosamente em alarme.
SuccessPositive outcomeUma ação de revisão não significa necessariamente que um alarme foi resolvido com sucesso.
InfoInformational conditionDiferente do conteúdo desativado.
NeutralUnclassified neutral conditionDisponível quando não se aplica nenhum julgamento de estado.

Hierarquia de contornos

Fonte
Nome / RegraValor / ConfiguraçãoUso
--theme-color-hard-bdrStrong solid boundarySeparação forte.
--theme-color-std-bdrStandard control boundaryControle de entrada ou seleção.
--theme-color-soft-bdrCard boundaryUsado para o inspetor do caderno.
--theme-color-weak-bdrRegion boundarySepare as regiões principais com sutileza.
--theme-color-x-weak-bdrVery subtle boundaryDivisão de baixa ênfase.
--theme-primary-bdr-1Complete border valueUse como borda: var(--theme-primary-bdr-1), não como cor.

Papéis tipográficos

Fonte
Nome / RegraValor / ConfiguraçãoUso
HeadingsH1 through H6Hierarquia do documento.
BodyMultiline readingObservações de inspeção e explicações.
LabelSingle-line component textControles e campos curtos.
DisplaySingle-line KPI presentationContagens; não parágrafos.
CodeCode and technical syntaxExemplos ou identificadores API, quando apropriado.

Captura do Event List API

Fonte
Nome / RegraValor / ConfiguraçãoUso
IxEventList.itemHeightS | L | number; default SUse L para o título e os metadados de exemplo.
IxEventList.compactboolean; default falseO modo compacto é selecionado explicitamente.
IxEventList.chevronboolean; default falseExiba um indicador de navegação.
IxEventList.animatedboolean; default falseEvite movimento desnecessário em um registro estático.
IxEventListItem.itemColorstringExpressão de cor do tema CSS.
IxEventListItem.selectedboolean; default falseControlado pelo ID do registro selecionado.
IxEventListItem.variantoutline | filled; default outlineEscolha de apresentação.
IxEventListItem.disabledboolean; default falseDesative apenas quando não houver interação disponível.
itemClickCustom eventO wrapper React onItemClick seleciona o registro.
03

Siemens iX Guia completo do sistema de design

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

DESIGN-siemens-ix.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 Siemens iX: eventos industriais com estados distintos de revisão e resolução

Um caderno, não um painel de controle de máquinas

O exemplo funcional é um caderno fictício de equipamentos. Três registros mantêm a gravidade de origem, enquanto um estado de revisão local separado acompanha o que o leitor inspecionou. Essa separação é essencial para a composição: selecionar uma linha, ler uma observação e resolver uma condição física são operações diferentes. A prévia implementa as duas primeiras e não afirma oferecer controle em tempo real.

Com base neste guia de OpenDesign

O Event List é um ponto de partida melhor do que cartões decorativos, pois seu estado selecionado, marcador de gravidade e chevron tornam registros repetidos fáceis de percorrer como uma coleção navegável. O inspetor exibe textos mais longos fora da linha. Não há fluxo de telemetria falso nem notificação de sucesso que afirme que um alarme foi resolvido.

Consulte a especificação de apoio

Sistema de design Siemens iX: papéis de cor para significados operacionais

Combine marcadores com cores de leitura

O sistema de cores diferencia camadas de fundo opacas de preenchimentos semitransparentes dos componentes. Não é possível avaliar o preenchimento de um componente sem considerar a superfície abaixo dele. Use as variáveis reais do tema no código nativo, em vez de copiar um valor hexadecimal de uma captura de tela para cada linha.

Os estilos de texto padrão e suave atendem a prioridades de leitura diferentes. O texto fraco é destinado ao conteúdo desativado; por isso, um horário necessário para uma investigação não deve ser automaticamente colocado nesse estilo. Para o primeiro plano de uma mensagem de erro, o papel dedicado a texto de alarme é mais apropriado do que reutilizar um preenchimento de status sem critério.

  • Exiba a palavra Alarme, Aviso ou Informação ao lado da borda colorida.
  • Mantenha o marcador de alarme após a revisão local; a revisão não altera a condição de origem.
  • Reserve o estilo selecionado para o estado de navegação, para que gravidade e seleção continuem distintas.

Consulte a especificação de apoio

Sistema de design Siemens iX: tipografia que diferencia observações de rótulos

Use formatos em vez de supor uma escala de pixels

O iX organiza a tipografia em títulos, corpo, rótulos, exibição e código. Observações de inspeção precisam do comportamento multilinha do corpo; uma contagem grande pode usar o estilo de exibição; e um rótulo curto de filtro pertence à categoria de rótulos. O estilo de exibição não é um atalho para aumentar o texto de toda a descrição de um evento.

O exemplo documentado ix-typography format="h3" oferece um ponto de partida concreto para a implementação. O mixin Sass equivalente typography-h3 permite usar um elemento personalizado sem recriar as regras tipográficas. A prévia usa intencionalmente uma fonte substituta do sistema e tamanhos tipográficos do aplicativo; esses valores não são apresentados como tokens oficiais da Siemens.

Consulte a especificação de apoio

Sistema de design Siemens iX: seleção e densidade do Event List

Controle a identidade separadamente da aparência do item

A captura API expõe itemHeight como S, L ou um número. O exemplo escolhe L, mantém compact no padrão false e habilita um chevron. Um registro de produção com títulos localizados mais longos deve verificar se a altura escolhida comporta a quebra de linha, em vez de presumir que todos os registros cabem só porque o exemplo cabe.

Cada item recebe selected a partir da comparação de IDs e envia itemClick pelo manipulador onItemClick do wrapper. O inspetor consulta o mesmo ID. Isso evita que a seleção visual e o painel de detalhes se refiram silenciosamente a registros diferentes. As mudanças de filtro limpam explicitamente o ID selecionado.

Consulte a especificação de apoio

Sistema de design Siemens iX: um inspetor que se adapta a uma janela estreita

Mova os detalhes para baixo da coleção de eventos

A grade de duas colunas em proporção dois para um do exemplo é um layout do aplicativo, não um token de grade publicado do iX. Em uma janela estreita, ela passa a ter uma coluna, mantendo os registros antes do inspetor. O inspetor não cria uma armadilha de rolagem aninhada; o leitor pode percorrer o exemplo inteiro naturalmente.

Os metadados do evento aparecem em uma segunda linha, com uma cor secundária legível. O filtro fica fora das linhas repetidas e não muda de lugar quando os registros são alterados. Um parágrafo de status informa o resultado da revisão local do registro selecionado, sem alterar o filtro nem substituir o título.

Consulte a especificação de apoio

Sistema de design Siemens iX: torne os estados perceptíveis sem depender de cor ou precisão do ponteiro

Texto, controles de teclado e foco

A prévia offline usa botões nativos para os registros, um seletor identificado para a gravidade e uma região de status aria-live para informar o resultado da revisão. Enter e Espaço podem selecionar um registro. A composição da biblioteca nativa usa os wrappers do Event List; antes de adotar substituições personalizadas de foco, teste o comportamento de teclado e de tecnologias assistivas na versão instalada.

Os rótulos descrevem a distinção de negócio: Marcar como revisado localmente, não Resolver alarme. Uma ação de revisão desativada vem acompanhada de um estado revisado visível. A cor não transmite todo o significado, e o filtro não deixa uma seleção obsoleta e inacessível oculta em outra categoria.

Consulte a especificação de apoio

Sistema de design Siemens iX: conecte o pacote, o tema e o estado local do aplicativo

Uma sequência de integração planejada

O bloco de configuração contém as importações de pacotes, os atributos de tema do documento, as propriedades reais dos componentes, o estado completo de React e o CSS do aplicativo. O seletor de tema é data-ix-color-schema, não um atributo personalizado de nome parecido. No aplicativo, fixe versões compatíveis do core, dos wrappers e dos ícones instalados.

O exemplo visual é uma interpretação offline de HTML/CSS dessas regras de interação. Sua paleta azul-marinho escura, margens internas de 24 pixels e ilustração esquemática de equipamentos são escolhas originais do aplicativo. Para obter fidelidade visual nativa, execute o exemplo separado de React com a folha de estilos oficial e inspecione os valores calculados do tema.

  1. Instale core, wrappers React e ícones em um scaffold Vite React; mantenha o elemento raiz gerado.
  2. Substitua main.jsx e style.css pelos arquivos fornecidos e selecione classic com dark, light ou system no documento.
  3. Selecione um registro, marque-o como revisado, filtre a lista e confirme que a gravidade persiste enquanto a seleção oculta é limpa.

Consulte a especificação de apoio

Sistema de design Siemens iX: exemplos de componentes

Exemplo interativo completo e independente

Salve o documento completo como index.html e abra-o em um navegador. Interpretação independente offline de HTML/CSS. Paleta original, fonte do sistema e dimensões do aplicativo; não é o runtime nativo do iX.

html
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Equipment event notebook — iX interpretation</title><style>
*{box-sizing:border-box}body{margin:0;background:#000028;color:#f3f3fa;font:15px/1.5 Arial,sans-serif}button,select{font:inherit;color:inherit}button{cursor:pointer}button:focus-visible,select:focus-visible{outline:3px solid #00cccc;outline-offset:3px}.app{max-width:1200px;margin:auto;padding:28px}.top{display:flex;justify-content:space-between;gap:16px;border-bottom:1px solid #55556b;padding-bottom:18px}.brand{letter-spacing:.12em;color:#00cccc}.dim{color:#b6b6c8}h1{font-size:30px;font-weight:500;line-height:1.2;margin:20px 0 8px}h2{font-size:21px;font-weight:500;margin:0 0 12px}.banner{display:grid;grid-template-columns:1.2fr 1fr;gap:24px;align-items:center;padding-bottom:24px}.schematic{height:140px;position:relative;display:flex;align-items:center;justify-content:space-evenly;border-bottom:2px solid #77788e;background:linear-gradient(transparent 23px,#23233c 24px);background-size:24px 24px}.schematic:before{content:'';position:absolute;left:10%;right:10%;top:68px;height:5px;background:#666780}.unit{position:relative;width:76px;height:76px;border:2px solid #b6b6c8;background:#141432;display:grid;place-content:center;text-align:center}.unit:first-child{border-color:#ff8da5}.unit span{color:#b6b6c8;font:12px monospace}.toolbar{display:flex;align-items:center;gap:16px;margin:10px 0 18px}select{background:#23233c;border:1px solid #8b8b9e;padding:8px 28px 8px 10px}.layout{display:grid;grid-template-columns:1.6fr 1fr;gap:24px}.event{width:100%;display:grid;grid-template-columns:70px 1fr 20px;gap:14px;text-align:left;align-items:center;padding:18px 14px;border:1px solid #55556b;border-left:4px solid var(--severity);background:#141432;margin-bottom:10px}.event:hover{background:#292944}.event[aria-pressed=true]{outline:2px solid #00cccc;outline-offset:1px}.event strong{font-size:15px;font-weight:600;display:block}.event small{display:block;color:#c0c0cf;margin-top:4px}.severity{font-size:11px;letter-spacing:.06em}.inspector{padding:20px;background:#23233c;border-top:3px solid #00cccc;min-height:290px}.meta{font:12px monospace;color:#b6b6c8}.tag{font-size:12px;border:1px solid #6c6c80;padding:3px 8px;display:inline-block;margin:10px 0}.action{background:#00cccc;border:0;color:#000028;padding:11px 16px;margin-top:10px}.action:disabled{background:#515168;color:#e0e0e8;cursor:default}.status{min-height:48px;color:#b7eeee;font-size:13px}.note{border-top:1px solid #55556b;margin-top:24px;padding-top:16px;color:#b6b6c8;font-size:12px}@media(max-width:650px){.app{padding:18px}.top{font-size:12px}.banner,.layout{grid-template-columns:1fr}.banner{gap:8px}.schematic{height:115px}.schematic:before{top:56px}.unit{height:60px;width:65px}h1{font-size:26px}.event{grid-template-columns:60px 1fr 10px;gap:8px}.toolbar{flex-wrap:wrap}}
</style><main class="app"><header class="top"><b class="brand">EVENT NOTEBOOK</b><span class="dim">Sample plant / offline</span></header><div class="banner"><div><h1>Inspect the event.<br>Keep its meaning.</h1><p class="dim">Review equipment notes without changing their original severity.</p></div><div class="schematic" aria-label="Original schematic of three fictional equipment units" role="img"><div class="unit">A<span>PUMP</span></div><div class="unit">B<span>PUMP</span></div><div class="unit">C<span>LINE</span></div></div></div><div class="toolbar"><label for="severity">Severity</label><select id="severity"><option value="all">All events</option><option value="alarm">Alarm</option><option value="warning">Warning</option><option value="info">Info</option></select><span class="dim" id="count"></span></div><div class="layout"><section aria-label="Event records" id="events"></section><aside class="inspector" aria-label="Selected event" id="detail"></aside></div><p class="note">Independent HTML interpretation of Siemens iX interaction rules. Original colors, dimensions and fictional equipment records. Local review does not acknowledge or resolve a live alarm.</p></main><script>
const data=[{id:'E-014',severity:'alarm',color:'#ff8da5',title:'Cooling flow below sample threshold',asset:'Pump A',time:'09:42',note:'Inspect the cooling circuit before considering a reset. This fictional record remains an alarm after you mark the note reviewed.'},{id:'E-015',severity:'warning',color:'#ffce6b',title:'Filter service approaching',asset:'Pump B',time:'09:38',note:'Schedule a filter inspection. Reviewing this notebook entry does not schedule maintenance or alter equipment.'},{id:'E-016',severity:'info',color:'#65cfff',title:'Inspection checklist attached',asset:'Line C',time:'09:30',note:'A fictional checklist is available for review. This sample displays the record; it does not connect to a document service.'}];let selected='E-014';const reviewed=new Set();function render(){let visible=data.filter(r=>severity.value==='all'||r.severity===severity.value);document.querySelector('#count').textContent=visible.length+' event'+(visible.length===1?'':'s');events.innerHTML=visible.map(r=>`<button class="event" id="row-${r.id}" style="--severity:${r.color}" aria-pressed="${selected===r.id}" data-id="${r.id}"><span class="severity">${r.severity.toUpperCase()}</span><span><strong>${r.title}</strong><small>${r.asset} · ${r.time}${reviewed.has(r.id)?' · Reviewed locally':''}</small></span><span aria-hidden="true">›</span></button>`).join('');const r=visible.find(r=>r.id===selected);detail.innerHTML=r?`<div class="meta">${r.id} / ${r.asset}</div><h2>${r.title}</h2><span class="tag">${r.severity.toUpperCase()} · source condition unchanged</span><p>${r.note}</p><button class="action" id="review" ${reviewed.has(r.id)?'disabled':''}>Mark reviewed locally</button><p class="status" role="status">${reviewed.has(r.id)?'Reviewed in this browser session. Source severity is unchanged.':''}</p>`:'<h2>Select an event</h2><p class="dim">Choose a record to inspect its note.</p>';events.querySelectorAll('button').forEach(b=>b.onclick=()=>{selected=b.dataset.id;render();document.getElementById('row-'+selected).focus()});if(r&&!reviewed.has(r.id))document.querySelector('#review').onclick=()=>{reviewed.add(r.id);render()}}const severity=document.querySelector('#severity'),events=document.querySelector('#events'),detail=document.querySelector('#detail');severity.onchange=()=>{selected='';render()};render();
</script></html>

Referência de código

  • Marcar um evento como revisado não altera sua gravidade nem resolve um alarme de equipamento. A entrada nativa do iX demonstra separadamente a seleção na Event List e os atributos de tema.

Event List com painel de inspeção controlado separadamente

Um ID selecionado controla o destaque do item e os detalhes. A revisão apenas registra um estado local no caderno; a gravidade original continua visível.

jsx
// In a Vite React project: npm install @siemens/ix @siemens/ix-react @siemens/ix-icons
// src/main.jsx
import React, {useState} from 'react';
import {createRoot} from 'react-dom/client';
import {IxEventList, IxEventListItem, IxTypography} from '@siemens/ix-react';
import '@siemens/ix/dist/siemens-ix/siemens-ix.css';
import './style.css';
document.documentElement.dataset.ixTheme='classic';
document.documentElement.dataset.ixColorSchema='dark';
const records=[
 {id:'E-014',severity:'alarm',title:'Cooling flow below sample threshold',asset:'Pump A',time:'09:42',note:'Original demonstration record: inspect the cooling circuit before considering a reset.'},
 {id:'E-015',severity:'warning',title:'Filter service approaching',asset:'Pump B',time:'09:38',note:'Original demonstration record: schedule a filter inspection.'},
 {id:'E-016',severity:'info',title:'Inspection checklist attached',asset:'Line C',time:'09:30',note:'Original demonstration record: a checklist is available for review.'}
];
function App(){
 const [filter,setFilter]=useState('all'),[selected,setSelected]=useState('E-014'),[reviewed,setReviewed]=useState([]);
 const visible=records.filter(r=>filter==='all'||r.severity===filter);
 const record=visible.find(r=>r.id===selected);
 return <main><h1>Equipment event notebook</h1><p>Fictional records. Reviewing an entry does not control equipment or acknowledge a live alarm.</p>
 <label htmlFor="severity">Severity</label><select id="severity" value={filter} onChange={e=>{setFilter(e.target.value);setSelected('')}}>
 <option value="all">All events</option><option value="alarm">Alarm</option><option value="warning">Warning</option><option value="info">Info</option></select>
 <div className="workspace"><section aria-label="Event records"><IxEventList itemHeight="L" chevron>
 {visible.map(r=><IxEventListItem key={r.id} selected={selected===r.id} itemColor={`var(--theme-color-${r.severity})`} onItemClick={()=>setSelected(r.id)}>
 <div className="record"><strong>{r.title}</strong><span>{r.severity.toUpperCase()} · {r.asset} · {r.time}{reviewed.includes(r.id)?' · Reviewed locally':''}</span></div>
 </IxEventListItem>)}
 </IxEventList></section><aside aria-label="Selected event">
 {record?<><IxTypography format="h3">{record.id} / {record.asset}</IxTypography><p>{record.note}</p>
 <button type="button" onClick={()=>setReviewed(a=>a.includes(record.id)?a:[...a,record.id])} disabled={reviewed.includes(record.id)}>Mark reviewed locally</button>
 <p role="status">{reviewed.includes(record.id)?'Reviewed in this browser session. Source severity is unchanged.':''}</p></>:<p>Select an event to inspect its record.</p>}
 </aside></div></main>
}
createRoot(document.getElementById('root')).render(<App/>);

/* src/style.css — custom dimensions are application choices */
main{max-width:72rem;margin:auto;padding:24px;color:var(--theme-color-std-text)}
.workspace{display:grid;grid-template-columns:2fr 1fr;gap:24px;margin-top:24px}
.workspace>*{min-width:0}aside{padding:20px;border:1px solid var(--theme-color-soft-bdr)}
.record{display:grid;gap:4px;padding:8px;white-space:normal;overflow-wrap:anywhere}
.record span{color:var(--theme-color-soft-text)}
button,select{font:inherit;padding:10px;background:var(--theme-color-component-1);color:var(--theme-color-std-text);border:1px solid var(--theme-color-std-bdr)}
button:focus-visible,select:focus-visible{outline:2px solid var(--theme-color-primary);outline-offset:3px}
@media(max-width:700px){.workspace{grid-template-columns:1fr}}

Referência de código

  • Use itemColor para o indicador de gravidade e um rótulo textual de gravidade legível.
  • Alterar o filtro de gravidade limpa a seleção, impedindo que o painel de inspeção descreva um evento oculto.
  • O botão de revisão local faz parte da lógica do aplicativo; não é um reconhecimento de alarme do iX API inventado.

Tipografia adaptada ao tema, sem copiar tamanhos de fonte

Use a propriedade format documentada ou o mixin Sass, em vez de fixar um tamanho de texto para todos os temas.

html / scss
<ix-typography format="h3">Inspection record</ix-typography>

@import "@siemens/ix/scss/mixins/font";
.inspection-title { @include typography-h3; }

Referência de código

  • A prévia usa uma fonte alternativa do sistema; ela não distribui fontes da marca Siemens.
04

Configuração do agente do sistema de design Siemens iX

Ponto de partida para implementação

Complete main.jsx e style.css para um scaffold Vite React com seu elemento raiz existente. Os wrappers oficiais, a importação CSS e as propriedades da Event List estão documentados; a compilação do pacote nativo não foi executada aqui. A prévia incorporada é uma interpretação independente offline.

jsx
// In a Vite React project: npm install @siemens/ix @siemens/ix-react @siemens/ix-icons
// src/main.jsx
import React, {useState} from 'react';
import {createRoot} from 'react-dom/client';
import {IxEventList, IxEventListItem, IxTypography} from '@siemens/ix-react';
import '@siemens/ix/dist/siemens-ix/siemens-ix.css';
import './style.css';
document.documentElement.dataset.ixTheme='classic';
document.documentElement.dataset.ixColorSchema='dark';
const records=[
 {id:'E-014',severity:'alarm',title:'Cooling flow below sample threshold',asset:'Pump A',time:'09:42',note:'Original demonstration record: inspect the cooling circuit before considering a reset.'},
 {id:'E-015',severity:'warning',title:'Filter service approaching',asset:'Pump B',time:'09:38',note:'Original demonstration record: schedule a filter inspection.'},
 {id:'E-016',severity:'info',title:'Inspection checklist attached',asset:'Line C',time:'09:30',note:'Original demonstration record: a checklist is available for review.'}
];
function App(){
 const [filter,setFilter]=useState('all'),[selected,setSelected]=useState('E-014'),[reviewed,setReviewed]=useState([]);
 const visible=records.filter(r=>filter==='all'||r.severity===filter);
 const record=visible.find(r=>r.id===selected);
 return <main><h1>Equipment event notebook</h1><p>Fictional records. Reviewing an entry does not control equipment or acknowledge a live alarm.</p>
 <label htmlFor="severity">Severity</label><select id="severity" value={filter} onChange={e=>{setFilter(e.target.value);setSelected('')}}>
 <option value="all">All events</option><option value="alarm">Alarm</option><option value="warning">Warning</option><option value="info">Info</option></select>
 <div className="workspace"><section aria-label="Event records"><IxEventList itemHeight="L" chevron>
 {visible.map(r=><IxEventListItem key={r.id} selected={selected===r.id} itemColor={`var(--theme-color-${r.severity})`} onItemClick={()=>setSelected(r.id)}>
 <div className="record"><strong>{r.title}</strong><span>{r.severity.toUpperCase()} · {r.asset} · {r.time}{reviewed.includes(r.id)?' · Reviewed locally':''}</span></div>
 </IxEventListItem>)}
 </IxEventList></section><aside aria-label="Selected event">
 {record?<><IxTypography format="h3">{record.id} / {record.asset}</IxTypography><p>{record.note}</p>
 <button type="button" onClick={()=>setReviewed(a=>a.includes(record.id)?a:[...a,record.id])} disabled={reviewed.includes(record.id)}>Mark reviewed locally</button>
 <p role="status">{reviewed.includes(record.id)?'Reviewed in this browser session. Source severity is unchanged.':''}</p></>:<p>Select an event to inspect its record.</p>}
 </aside></div></main>
}
createRoot(document.getElementById('root')).render(<App/>);

/* src/style.css — custom dimensions are application choices */
main{max-width:72rem;margin:auto;padding:24px;color:var(--theme-color-std-text)}
.workspace{display:grid;grid-template-columns:2fr 1fr;gap:24px;margin-top:24px}
.workspace>*{min-width:0}aside{padding:20px;border:1px solid var(--theme-color-soft-bdr)}
.record{display:grid;gap:4px;padding:8px;white-space:normal;overflow-wrap:anywhere}
.record span{color:var(--theme-color-soft-text)}
button,select{font:inherit;padding:10px;background:var(--theme-color-component-1);color:var(--theme-color-std-text);border:1px solid var(--theme-color-std-bdr)}
button:focus-visible,select:focus-visible{outline:2px solid var(--theme-color-primary);outline-offset:3px}
@media(max-width:700px){.workspace{grid-template-columns:1fr}}

Um prompt para seu projeto

Prompt para agente de IA
Crie um caderno de eventos Siemens iX usando as propriedades verificadas da Event List e os atributos de tema documentados neste guia. Preserve a gravidade independentemente da seleção e da revisão local. Use cores semânticas do tema na versão nativa. Nunca sugira que uma ação no caderno resolve um alarme físico. Mantenha os filtros identificados, permita acessar as linhas pelo teclado e empilhe o painel de inspeção em telas estreitas.
05

Fontes e escopo do sistema de design Siemens iX

Guia independente de OpenDesign. Os dados de eventos e a ilustração dos equipamentos são fictícios. O estilo da prévia é uma interpretação original; o exemplo separado de React usa o API documentado do iX. Não há conexão com máquinas, telemetria nem reconhecimento de alarmes em tempo real.