Дизайн корпоративных продуктов · Новый ресурс

Дизайн-система Siemens iX.

Изучите промышленные события с помощью явно заданной классификации уровней серьёзности, цветовых ролей с учётом темы и API Event List от iX. В этом руководстве создаётся локальный журнал оборудования, в котором проверенная запись не выдаётся за устранённую аварию оборудования.

Руководство OpenDesign7 глав39 справочных записейАвторское руководство по приложению
01

Предварительный просмотр интерфейса дизайн-системы Siemens iX

Отфильтруйте вымышленные события, изучите примечание к оборудованию и отметьте запись как проверенную локально, при этом сохранив видимым исходный уровень критичности.

Журнал событий оборудованияОткрыть полный пример
Независимая автономная интерпретация HTML/CSS. Оригинальная палитра, системный шрифт и размеры приложения; это не нативная среда выполнения iX. · Справочник по реализации
02

Справочник по дизайн-системе Siemens iX

Текущая общедоступная документация iX и официальный снимок компонента API из основной ветки. Приведённые ниже значения цветов — семантические роли, а не придуманные фиксированные шестнадцатеричные коды. Установленные версии пакетов должны быть зафиксированы согласованно; в автономном примере используются собственные палитра и размеры с явным описанием.

Тема и подключение пакетов

Источник
Название / правилоЗначение / конфигурацияПрименение
Core package@siemens/ixВеб-компоненты и глобальная таблица стилей.
React wrappers@siemens/ix-reactИнтеграция компонентов React.
Icons@siemens/ix-iconsОфициальная зависимость для значков.
data-ix-themeclassicСелектор темы на уровне документа.
data-ix-color-schemadark | light | systemТочное написание атрибута задаётся схемой.
Global CSS@siemens/ix/dist/siemens-ix/siemens-ix.cssИмпортируйте один раз в точке входа приложения.

Роли текста и поверхностей

Источник
Название / правилоЗначение / конфигурацияПрименение
--theme-color-primaryPrimary action roleОпределяются выбранной темой.
--theme-color-std-textDefault reading colorЗаголовки событий и основной текст.
--theme-color-soft-textSecondary reading colorВремя и метаданные ресурса.
--theme-color-weak-textDisabled reading colorНе используйте для важной второстепенной информации.
--theme-color-alarm-textAlarm text roleИспользуйте, когда текст ошибки должен иметь цвет переднего плана.
--theme-color-component-1Interactive component fillПолупрозрачный цвет; его вид зависит от расположенной под ним поверхности.
color-0Transparent background roleДругие уровни фона непрозрачны.

Классификация критичности

Источник
Название / правилоЗначение / конфигурацияПрименение
AlarmError, invalid or dangerous conditionСохраняйте текстовую метку рядом с цветным маркером.
CriticalBetween alarm and warningОтдельное значение, а не ещё один декоративный оттенок.
WarningCondition requiring attentionНе повышайте статус до аварийного без явного основания.
SuccessPositive outcomeДействие проверки не означает, что аварийное событие успешно устранено.
InfoInformational conditionНе путайте с отключённым содержимым.
NeutralUnclassified neutral conditionДоступно, когда оценка статуса не применяется.

Иерархия границ

Источник
Название / правилоЗначение / конфигурацияПрименение
--theme-color-hard-bdrStrong solid boundaryВысокая степень разделения.
--theme-color-std-bdrStandard control boundaryЭлемент управления вводом или выбором.
--theme-color-soft-bdrCard boundaryИспользуется в области сведений журнала.
--theme-color-weak-bdrRegion boundaryМягко разделяйте крупные области.
--theme-color-x-weak-bdrVery subtle boundaryРазделение с низкой выразительностью.
--theme-primary-bdr-1Complete border valueИспользуйте как границу: var(--theme-primary-bdr-1), а не как цвет.

Роли типографики

Источник
Название / правилоЗначение / конфигурацияПрименение
HeadingsH1 through H6Иерархия текста
BodyMultiline readingПримечания и пояснения для проверки.
LabelSingle-line component textКороткие элементы управления и поля.
DisplaySingle-line KPI presentationСчётчики, не абзацы.
CodeCode and technical syntaxПримеры API или идентификаторы, если уместно.

Снимок Event List API

Источник
Название / правилоЗначение / конфигурацияПрименение
IxEventList.itemHeightS | L | number; default SДля названия и метаданных примера используйте L.
IxEventList.compactboolean; default falseКомпактный режим явно включён.
IxEventList.chevronboolean; default falseПокажите индикатор перехода.
IxEventList.animatedboolean; default falseНе добавляйте лишнюю анимацию в статический журнал.
IxEventListItem.itemColorstringВыражение цвета темы CSS.
IxEventListItem.selectedboolean; default falseУправляется идентификатором выбранной записи.
IxEventListItem.variantoutline | filled; default outlineПараметр отображения.
IxEventListItem.disabledboolean; default falseОтключайте только тогда, когда взаимодействие недоступно.
itemClickCustom eventОбёртка React выбирает запись через onItemClick.
03

Полное руководство по дизайн-системе Siemens iX

Практическое руководство по выбору, применению и оценке этой системы для реального интерфейса.

DESIGN-siemens-ix.md

Подробные рекомендации, отправная точка для реализации и ссылки на источники.

Скачать руководство

Дизайн-система Siemens iX: промышленные события с отдельными состояниями проверки и устранения

Журнал, а не панель управления оборудованием

Рабочий пример — вымышленный журнал оборудования. В трёх записях сохраняется исходный уровень критичности, а отдельное локальное состояние проверки показывает, какие из них просмотрел читатель. Для композиции важно разделять эти понятия: выбрать строку, прочитать примечание и устранить физическую неисправность — разные действия. Предварительный просмотр поддерживает первые два и не заявляет об управлении работающим оборудованием.

Из этого руководства OpenDesign

Event List — лучшая основа, чем декоративные карточки: выбранное состояние, маркер критичности и шеврон помогают воспринимать повторяющиеся записи как список для навигации. Подробный текст вынесен в область сведений. Здесь нет имитации потока телеметрии или уведомления об успехе, которое ложно утверждало бы, что аварийная ситуация устранена.

Прочитать вспомогательную спецификацию

Дизайн-система Siemens iX: цветовые роли для передачи операционного смысла

Сопровождайте маркеры цветами для чтения

Цветовая система различает непрозрачные фоновые слои и полупрозрачные заливки компонентов. Нельзя оценивать заливку компонента отдельно от поверхности под ней. В нативном коде используйте фактические переменные темы, а не копируйте шестнадцатеричное значение из снимка экрана в каждую строку.

Стандартный и приглушённый текст предназначены для разных задач чтения. Слабый текст предусмотрен для отключённых элементов, поэтому временную метку, важную для расследования, не следует автоматически оформлять этой ролью. Для текста ошибки лучше подходит специальная роль цвета аварийного текста, чем повторное использование цвета заливки статуса без разбора.

  • Показывайте рядом с цветной полосой слово «Авария», «Предупреждение» или «Информация».
  • Не убирайте маркер аварии после локальной проверки: проверка не меняет исходное состояние.
  • Используйте оформление выбора только для состояния навигации, чтобы его можно было отличить от уровня критичности.

Прочитать вспомогательную спецификацию

Дизайн-система Siemens iX: типографика, отделяющая заметки от меток

Используйте форматы, а не предполагаемую шкалу пикселей

В iX типографика разделена на заголовки, основной текст, метки, крупный акцентный текст и код. Для примечаний по результатам проверки нужен основной текст с поддержкой нескольких строк; крупный счётчик можно оформить как акцентный текст; короткая метка фильтра относится к категории меток. Крупный акцентный формат не предназначен для того, чтобы просто увеличить весь текст описания события.

В документации приведён конкретный пример реализации ix-typography format="h3". Соответствующий Sass-миксин typography-h3 позволяет оформить пользовательский элемент без повторного описания правил шрифта. В предварительном просмотре намеренно используются системный резервный шрифт и размеры приложения; эти значения не выдаются за официальные токены Siemens.

Прочитать вспомогательную спецификацию

Дизайн-система Siemens iX: выбор и плотность Event List

Не связывайте идентификатор элемента с его внешним видом

В снимке API для itemHeight доступны значения S, L или числовое значение. В примере выбрано L, параметр compact оставлен со значением false по умолчанию, а шеврон включён. Для производственного журнала с длинными локализованными заголовками нужно проверить выбранную высоту с учётом переноса строк, а не предполагать, что любая запись поместится только потому, что помещается пример.

Для каждого элемента значение selected вычисляется сравнением идентификаторов, а itemClick передаётся обработчику onItemClick обёртки. Область сведений использует тот же идентификатор. Так визуально выбранная запись и отображаемые подробности не расходятся незаметно. При изменении фильтра выбранный идентификатор явно сбрасывается.

Прочитать вспомогательную спецификацию

Дизайн-система Siemens iX: область сведений для узкого экрана

Переместите подробности под список событий

Сетка примера в пропорции два к одному — это макет приложения, а не опубликованный токен сетки iX. На узком экране она превращается в одну колонку: сначала идут записи, затем область сведений. В этой области нет вложенной прокрутки, которая мешала бы взаимодействию: весь пример можно прокручивать обычным способом.

Метаданные события расположены на второй строке и выделены хорошо читаемым вторичным цветом. Фильтр находится за пределами повторяющихся строк и не перемещается при изменении записей. Абзац состояния сообщает результат локальной проверки выбранной записи, не изменяя фильтр и не подменяя заголовок.

Прочитать вспомогательную спецификацию

Дизайн-система Siemens iX: передавайте состояние без опоры на цвет или точность указания

Текст, управление с клавиатуры и фокус

Автономный предпросмотр использует нативные кнопки для записей, элемент select с подписью для выбора уровня серьёзности и область статуса aria-live для обратной связи о проверке. Запись можно выбрать клавишами Enter и пробел. В нативной композиции библиотеки используются обёртки Event List; перед добавлением пользовательских переопределений фокуса проверьте её работу с клавиатурой и вспомогательными технологиями в установленной версии.

Подписи отражают различие с точки зрения бизнеса: «Отметить как проверенное локально», а не «Сбросить сигнал тревоги». Отключённое действие проверки сопровождается видимым состоянием «Проверено». Смысл не передаётся только цветом, а фильтр не оставляет недоступный устаревший выбор скрытым в другой категории.

Прочитать вспомогательную спецификацию

Дизайн-система Siemens iX: свяжите пакет, тему и локальное состояние приложения

Продуманная последовательность интеграции

Блок настройки включает импорты пакетов, атрибуты темы документа, фактические свойства компонентов, полный набор состояний React и приложение CSS. Для выбора темы используется data-ix-color-schema, а не похожий по названию пользовательский атрибут. Зафиксируйте совместимые версии core, обёрток и значков в приложении.

Визуальный образец — автономная интерпретация этих правил взаимодействия на основе HTML/CSS. Тёмно-синяя палитра, поля по 24 пикселя и схематичное изображение оборудования — авторские решения приложения. Чтобы получить нативное визуальное соответствие, запустите отдельный пример React с официальной таблицей стилей и проверьте вычисленные значения темы.

  1. Установите core, обёртки React и значки в шаблон Vite React; сохраните созданный корневой элемент.
  2. Замените main.jsx и style.css предоставленными файлами, затем выберите classic и задайте для документа тему dark, light или system.
  3. Выберите запись, отметьте её как проверенную, отфильтруйте список и убедитесь, что уровень серьёзности сохраняется, а скрытый выбор сбрасывается.

Прочитать вспомогательную спецификацию

Siemens iX Примеры компонентов дизайн-системы

Полноценный автономный интерактивный пример

Сохраните документ целиком как index.html и откройте его в браузере. Самостоятельная автономная интерпретация на основе HTML/CSS. Авторская палитра, системный шрифт и размеры приложения; это не нативная среда выполнения 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>

Справочник по коду

  • Отметка о проверке события не меняет его уровень серьёзности и не сбрасывает сигнал тревоги оборудования. Отдельная запись iX показывает выбор в Event List и атрибуты темы.

Event List с отдельно управляемой панелью проверки

Выбранный идентификатор определяет подсветку элемента и сведения о нём. Проверка лишь фиксирует локальное состояние в журнале; исходный уровень серьёзности остаётся видимым.

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}}

Справочник по коду

  • Используйте itemColor для маркера уровня серьёзности и добавьте хорошо читаемую текстовую подпись.
  • При изменении фильтра уровня серьёзности выбор сбрасывается, чтобы панель проверки не описывала скрытое событие.
  • Локальная кнопка проверки — это логика приложения, а не вымышленная функция API подтверждения сигнала тревоги в iX.

Типографика, учитывающая тему, без фиксированных размеров шрифта

Используйте документированное свойство format или Sass-миксин, а не фиксируйте размер шрифта для всех тем.

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

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

Справочник по коду

  • В предпросмотре используется системный резервный шрифт; брендовые шрифты Siemens не распространяются.
04

Siemens iX Настройка агента дизайн-системы

Отправная точка для реализации

Полные файлы main.jsx и style.css для шаблона Vite React с уже имеющимся корневым элементом. Официальные обёртки, импорт CSS и свойства Event List описаны в документации; сборка нативного пакета здесь не выполнялась. Встроенный предпросмотр — самостоятельная автономная интерпретация.

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}}

Запрос для вашего проекта

Промпт для AI-агента
Создайте журнал событий Siemens iX, используя проверенные свойства Event List и атрибуты темы документа из этого руководства. Независимо от выбора и локальной проверки сохраняйте исходный уровень серьёзности. В нативной версии используйте семантические цвета темы. Не создавайте впечатление, будто действие в журнале сбрасывает сигнал тревоги физического оборудования. Добавьте подписи к фильтрам, обеспечьте управление строками с клавиатуры и располагайте панель проверки под списком на узких экранах.
05

Siemens iX Источники и область применения дизайн-системы

Самостоятельное руководство OpenDesign. Данные о событиях и иллюстрация оборудования вымышлены. Стилизация предпросмотра — авторская интерпретация; в отдельном примере React используется документированный API iX. Подключение к оборудованию, телеметрия и подтверждение активных сигналов не реализованы.