Siemens Industrial Experience (IX)
repository·main·Indexed 18 days ago
https://github.com/siemens/ixAn open-source design system providing UI patterns and components tailored for industrial software products. Built on native Web Components via Stencil, it offers official wrappers for React (@siemens/ix-react), Vue (@siemens/ix-vue), and Angular (@siemens/ix-angular), as well as specialized themes for AG Grid (@siemens/ix-aggrid) and Apache ECharts (@siemens/ix-echarts).
What's inside Siemens Industrial Experience
- Siemens Industrial Experience (IX) is a library of web components designed for industrial applications. It is part of a larger mono-repository containing various framework-specific integrations (such as Angular, React, and Vue) and specialized component packages. The core functionality is provided through standard Web Components, making them highly portable across different web environments.
Overview of Siemens Industrial Experience
mainSiemens Industrial Experience (IX) is an open-source design system designed to help designers, developers, and writers build consistent and efficient digital experiences for industrial software products. It provides a broad range of UI patterns, components, design tools, and content guidelines.Use the Siemens Industrial Experience Theme for ECharts
mainThe@siemens/ix-echartspackage provides a specialized theme for Apache ECharts, designed to align with the Siemens Industrial Experience (IX) design system. This allows developers to use ECharts while maintaining visual consistency with other IX components.Use the ix-dropdown-button component
mainTheix-dropdown-buttonis a component that combines a button with a dropdown menu. It is built using StencilJS and depends onix-button,ix-icon-button, andix-dropdownto function correctly.Use Siemens Industrial Experience Vue Components
mainThe@siemens/ix-vuepackage provides Vue-specific component wrappers for the Siemens Industrial Experience (IX) library. This allows you to use IX components within Vue applications while maintaining the design system's standards. This package is part of the larger Siemens IX mono-repository.Use the Siemens Industrial Experience theme for AG Grid
mainThe@siemens/ix-aggridpackage provides a specialized theme for AG Grid, designed to align with the Siemens Industrial Experience (IX) design system. This allows you to apply IX styling to your AG Grid instances within your applications.Understanding the Stencil Core Patch and CSS Module conflicts
mainThe
@siemens/ixrepository includes a patch for@stencil/core@4.38.3to resolve type conflicts between Stencil's ambient module declarations and modern build tools like Vite.The Problem
Stencil declares a broad
declare module '*.css'which returns astringtype. Because TypeScript uses wildcard matching, this declaration often intercepts*.module.cssfiles before they can be correctly typed as CSS Modules. This causes issues in environments like Vite, which expects CSS Modules to have the type{ readonly [key: string]: string }rather than a simplestring.The Solution
The patch comments out the
declare module '*.css'statement ininternal/stencil-ext-modules.d.tswithin the Stencil core package. This allows:- CSS Modules (
*.module.css) to use their correct types required by Vite. - Other file imports (like
*.svgor*.txt) to continue functioning. - Compatibility with Stencil-based components without breaking changes.
Alternatives if you avoid the patch
If you choose not to use this patch, you must either:
- Avoid using CSS Modules in any package that depends on
@siemens/ix-react. - Modify the build configuration to publish
@siemens/ixwithout exporting Stencil's internal types.
- CSS Modules (
How the Siemens IX architecture works
mainThe Siemens Industrial Experience (IX) follows a layered architecture where
packages/core(built with Stencil) is the single source of truth. All framework-specific packages (React, Angular, Vue) are auto-generated façades around these core Web Components.Key Layers:
- Core Components: Stencil-based UI primitives that emit compiled Web Components and type metadata.
- Framework Wrappers: Auto-generated bindings for React, Angular, and Vue. Warning: Never manually edit these generated proxies.
- Theming Packages: Integration helpers like
@siemens/ix-aggridand@siemens/ix-echartsthat align third-party libraries with IX design tokens. - Documentation: A pipeline that converts JSDoc and examples from test apps into documentation assets.
Theming system overview
mainThe IX theming system is based on SCSS and CSS custom properties (variables).
- Source: Theme SCSS is located in
packages/core/scss/theme/. - Tokens: Design tokens are exposed as CSS variables supporting both light and dark modes.
- Usage: Consumers switch themes by applying a specific theme class to the root element.
- Third-party integration: Packages like
@siemens/ix-aggridand@siemens/ix-echartsremap these core tokens to ensure external widgets visually align with the IX design system.
- Source: Theme SCSS is located in
How Siemens Industrial Experience components work
mainThe IX component library is built on native Web Components, ensuring high flexibility and interoperability. To allow for seamless integration into modern development workflows, the system provides official wrappers and support for major frontend frameworks, including:
- React (
@siemens/ix-react) - Vue (
@siemens/ix-vue) - Angular (
@siemens/ix-angular) - Stencil (Core Web Components)
- React (
ix-dropdown-button dependencies
mainThe
ix-dropdown-buttoncomponent has the following component dependencies. Ensure these are installed and available in your project:ix-buttonix-icon-buttonix-dropdown
Internally,
ix-buttonandix-icon-buttonalso depend onix-spinner.Migrate ix-group-dropdown-item to standard ix-dropdown-item
mainThe
ix-group-dropdown-itemcomponent has been removed. To create grouped dropdown items, use a standardix-dropdownwithix-groupandix-group-itemcomponents.<ix-group header="Header text" sub-header="Subheader text"> <ix-dropdown slot="dropdown"> <ix-dropdown-item label="Item 1"></ix-dropdown-item> <ix-dropdown-item label="Item 2"></ix-dropdown-item> </ix-dropdown> <ix-group-item text="Example text 1"></ix-group-item> <ix-group-item text="Example text 2"></ix-group-item> <ix-group-item text="Example text 3"></ix-group-item> </ix-group>