Operator screens and process graphics

HMI Shell <smart-hmi-shell>

HmiShell is the display frame for operator screens described in ISA-101.

Getting Started with React HmiShell Component

The Smart.Industrial React components need React 18 or later, because they render through react-dom/client. The steps use Vite with its react-ts template.

The complete demo in React is on the demo page, file by file.

1 Create a Vite + React + TypeScript app

  1. npm create vite@latest my-smart-app -- --template react-ts
  2. cd my-smart-app
    then
    npm install

2 Install Smart.Industrial

npm install smart-industrial

3 Import styles and render the component

The sample replaces the content of src/App.tsx. It imports the stylesheets and the HmiShell component, sets the properties the demo sets and handles the themeChange event. It compiles under the template's strict TypeScript settings.

import 'smart-industrial/source/styles/smart.default.css';
import 'smart-industrial/source/styles/smart.industrial-elements.css';
import 'smart-industrial/source/styles/smart.industrial.css';
import 'smart-industrial/source/styles/smart.industrial-dark.css';
import { HmiShell } from 'smart-industrial/react/hmishell';

function App() {
  // Raised when the theme is switched through the toggle or setTheme, after
  // every element inside the shell has been switched with it.
  const handleThemeChange = (event: CustomEvent) => {
    const { theme, previousTheme } = event.detail;
    console.log('themeChange', theme, previousTheme);
  };

  return (
    <HmiShell
      theme="industrial"
      plant="Northfield plant"
      area={'Area 2 ยท Utilities & Process'}
      screen="Plant overview"
      user="J. Moreau"
      userRole="Operator"
      connection="connecting"
      showThemeToggle
      onThemeChange={handleThemeChange}
    />
  );
}

export default App;

The template's src/main.tsx renders App and needs no change.

Each component has an entry point of its own, and the sample imports from it. The entry point with all the components, smart-industrial/react, puts every component into the bundle, about 2.5 MB minified. Built with Vite, the Faceplate sample has 390 kB of JavaScript, React included, with smart-industrial/react/faceplate.

4 Run the dev server

npm run dev

Vite prints the URL of the application, usually http://localhost:5173/.

TypeScript Support

The types ship with smart-industrial. A type-only import of the component and its props uses import type, which the template's verbatimModuleSyntax requires:

import type { HmiShell, HmiShellProps } from 'smart-industrial/react/hmishell';

Each on* callback receives a CustomEvent whose detail is typed for that event, so the editor lists its fields. A handler typed (event: CustomEvent) => void, as in the sample, accepts it as well.

Accessibility

The keyboard interaction, roles and announcements of the component are on its accessibility page; they are the same in React.