エンタープライズ製品デザイン · 新しいリソース

Siemens iXデザインシステム.

明確な重大度の語彙、テーマに応じた色の役割、iX Event List APIを使って、産業機器のイベントを確認します。このガイドでは、確認済みの記録と、解決済みの機械アラームを混同せずに、機器のローカルノートを作成します。

OpenDesign ガイド7 章39件のリファレンス項目オリジナルアプリケーションガイド
01

Siemens iXデザインシステムのインターフェースプレビュー

架空のイベントを絞り込み、設備のメモを確認し、元の重大度を表示したままレコードをローカルで確認済みにできます。

設備イベントノート完全な例を開く
独立したオフラインのHTML/CSS解釈です。独自のパレット、システムフォント、アプリケーション寸法を使用しており、ネイティブのiXランタイムではありません。· 実装リファレンス
02

Siemens iXデザインシステムの設計リファレンス

公開中のiXドキュメントと、公式mainブランチのコンポーネントAPIスナップショットに基づいています。以下のカラー項目はセマンティックロールであり、固定の16進カラー値を独自に設定したものではありません。インストールするパッケージのバージョンは、すべて整合するよう固定してください。オフラインのサンプルでは、独自のパレットと寸法を使用していることを明示しています。

テーマとパッケージの導入

ソース
名前 / ルール値 / 設定用途
Core package@siemens/ixWebコンポーネントとグローバルスタイルシート。
React wrappers@siemens/ix-reactReactコンポーネントの統合。
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色としてではなく、border: 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選択したレコードIDによって制御されます。
IxEventListItem.variantoutline | filled; default outline表示方法の選択。
IxEventListItem.disabledboolean; default false操作できない場合に限り、無効にしてください。
itemClickCustom eventReactラッパーのonItemClickでレコードを選択します。
03

Siemens iXデザインシステム完全ガイド

実際のインターフェースで、このデザインシステムを選び、適用し、レビューするための実践ガイドです。

DESIGN-siemens-ix.md

詳しいガイダンス、実装の出発点、ソースへのリンクをまとめています。

ガイドをダウンロード

Siemens iXデザインシステム:確認状態と解決状態を明確に区別した産業用イベント

機械制御パネルではなく、ノートブック

動作するサンプルは、架空の設備ノートブックです。3件のレコードは元の重大度を保持し、別個のローカル確認状態で、読者が確認した項目を記録します。この区別は構成の要です。行の選択、メモの閲覧、物理的な状態の解決は、それぞれ異なる操作です。プレビューで実装しているのは最初の2つであり、実際の機器を制御するものではありません。

この OpenDesign ガイドから

選択状態、重大度マーカー、シェブロンによって、繰り返し表示されるレコードをナビゲーション可能な一覧として読み取りやすくできるため、装飾的なカードよりEvent Listが適しています。詳細な文章はインスペクターに表示し、行の外に分けて配置します。偽のテレメトリストリームや、アラームが解除されたと偽る成功トーストはありません。

関連する仕様を確認する

Siemens iXデザインシステム:運用上の意味を伝えるカラーの役割

マーカーには、読みやすい色のラベルを添える

カラーシステムでは、不透明な背景レイヤーと半透明のコンポーネント塗りつぶしを区別します。コンポーネントの塗りつぶしは、その下にある背景と切り離して評価できません。ネイティブコードではスクリーンショットの16進カラー値を各行にコピーするのではなく、実際のテーマ変数を使用してください。

StandardとSoftのテキストは、それぞれ異なる読み取り優先度に対応します。Weakテキストは無効なコンテンツ向けです。そのため、調査に必要なタイムスタンプを、理由なくこのロールに割り当てないでください。エラーの前景色には、ステータスの塗りつぶしをそのまま再利用するのではなく、専用のアラームテキストロールを使用するのが適切です。

  • 色付きの境界マーカーの横に「アラーム」「警告」「情報」の文字を表示します。
  • ローカルで確認済みにした後も、アラームマーカーを残してください。確認しても、元の状態は変わりません。
  • 選択スタイルはナビゲーション状態に限定し、重大度と選択状態を区別できるようにしてください。

関連する仕様を確認する

Siemens iX デザインシステムのタイポグラフィでメモとラベルを区別する

推測したピクセル値ではなく、フォーマットを使う

iXでは、タイポグラフィを見出し、本文、ラベル、ディスプレイ、コードに分類しています。点検メモには複数行に対応する本文のスタイルが必要です。大きな数値にはディスプレイ、短いフィルターラベルにはラベルのカテゴリが適しています。イベントの説明全体を大きく表示するために、ディスプレイのスタイルを流用しないでください。

ドキュメントに記載された ix-typography format="h3" の例を使えば、実装方法を具体的に確認できます。同等の Sass の typography-h3 mixin を使うと、フォントルールを再現せずに独自の要素へ適用できます。プレビューでは意図的にシステムフォントをフォールバックとして使い、アプリケーション側で文字サイズを設定しています。これらの値は、Siemensの公式トークンではありません。

関連する仕様を確認する

Siemens iX デザインシステムのイベントリストの選択と密度

項目の識別と表示を別々に制御する

APIのスナップショットでは、itemHeight に S、L、または数値を指定できます。この例では L を選び、compact は既定値の false のままにして、chevron を有効にしています。ローカライズ後にタイトルが長くなる本番環境のログでは、サンプルのように各レコードが収まると決めつけず、折り返しを考慮して高さを検証してください。

各項目にはIDの比較結果を selected として渡し、ラッパーの onItemClick ハンドラーを通じて itemClick を送信します。インスペクターも同じIDを参照します。これにより、選択表示と詳細パネルが気づかないうちに別のレコードを指す事態を防げます。フィルターを変更したときは、選択中のIDを明示的にクリアします。

関連する仕様を確認する

Siemens iX デザインシステムで狭い画面にも対応するインスペクター

詳細をイベント一覧の下に移動する

この例の2対1のグリッドはアプリケーション側のレイアウトであり、公開されているiXのグリッドトークンではありません。画面が狭い場合は1列にし、インスペクターより先にレコードが表示される順序を保ちます。インスペクター内にスクロール領域を入れ子にしないため、ページ全体を自然にスクロールできます。

イベントのメタデータは、読みやすいセカンダリカラーを使って2行目に表示します。フィルターは繰り返し表示される行の外に置き、レコードが変わっても位置を移動させません。ステータスの段落では、フィルターを変更したりタイトルを置き換えたりせずに、選択中のレコードに対するローカルな確認結果を示します。

関連する仕様を確認する

Siemens iX デザインシステムで色やポインターの精度に頼らず状態を伝える

テキスト、キーボード操作、フォーカス

オフラインプレビューでは、レコードにネイティブのボタン、重要度の選択にラベル付きのセレクトボックス、確認結果の通知に aria-live ステータス領域を使用します。EnterキーとSpaceキーでレコードを選択できます。ネイティブライブラリの構成では、Event Listのラッパーを使用します。カスタムのフォーカス設定を採用する前に、インストール済みバージョンのキーボード操作と支援技術への対応をテストしてください。

ラベルでは、「アラームを解決」ではなく「ローカルで確認済みにする」という業務上の違いを明確にします。確認済みの状態は、確認操作を無効にする場合も画面上に表示します。状態の意味を色だけに頼って伝えないでください。また、フィルターを変更した際に、別のカテゴリに隠れたまま操作できない古い選択状態を残さないようにします。

関連する仕様を確認する

Siemens iX デザインシステムにパッケージ、テーマ、アプリケーションのローカル状態を組み込む

段階を踏んで連携する

セットアップのコードには、パッケージのインポート、ドキュメントのテーマ属性、実際のコンポーネントプロパティ、Reactの状態全体、アプリケーションのCSSが含まれています。テーマセレクターには、似た名前の独自属性ではなく data-ix-color-schema を使います。アプリケーションでは、インストールする core、ラッパー、アイコンのバージョンに互換性があることを確認してください。

ビジュアルのサンプルは、このガイドの操作ルールを表現したオフラインのHTML/CSSです。濃紺の配色、24ピクセルの余白、模式的な設備のイラストは、アプリケーション独自の選択です。ネイティブの見た目を正確に確認するには、公式スタイルシートを使って別のReactの例を実行し、計算済みのテーマ値を調べてください。

  1. ViteのReactスキャフォールドに core、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の選択とテーマ属性を別途紹介しています。

独立して制御できるインスペクターパネル付きのイベントリスト

選択中のIDをもとに項目の強調表示と詳細を切り替えます。確認操作で記録するのはローカルなノートの状態だけです。元の重要度はそのまま表示されます。

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 を使い、読みやすいテキストの重要度ラベルも表示します。
  • 重要度フィルターを変更すると選択が解除され、非表示のイベントについてインスペクターが詳細を表示し続けるのを防げます。
  • ローカルの確認ボタンはアプリケーションのロジックです。iXに存在しないアラーム確認用のAPIを作り出すものではありません。

フォントサイズを固定せず、テーマに応じたタイポグラフィを使う

テーマをまたいで文字サイズを固定するのではなく、ドキュメントに記載された format プロパティまたは Sass mixin を使います。

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 デザインシステムのAIエージェント設定

実装の出発点

既存のルート要素があるViteのReactスキャフォールドで、main.jsx と style.css を完成させます。公式のラッパー、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 エージェント用プロンプト
検証済みのEvent Listプロパティと、このガイドに記載されたドキュメントのテーマ属性を使って、Siemens iXイベントノートを作成してください。重要度、選択、ローカルな確認状態はそれぞれ独立して保持します。ネイティブ版ではテーマのセマンティックカラーを使用してください。ノート上の操作で物理的なアラームが解決されるような表現は避けてください。フィルターにはラベルを付け、行をキーボードで操作できるようにし、画面が狭い場合はインスペクターを下に配置してください。
05

Siemens iX デザインシステムの情報源と対象範囲

独立したOpenDesignガイド。イベントデータと機器のイラストは架空のものです。プレビューのスタイルは独自の解釈であり、別のReactの例では、ドキュメントに記載されたiX APIを使用しています。機器への接続、テレメトリー、ライブ確認応答は実装されていません。