Instrument readouts and controls
Panel Meter <smart-panel-meter>
PanelMeter draws the moving-coil instrument screwed into the front of a rack: a rectangular case, a shallow arc of scale across the top of it and a long needle swinging from a pivot near the bottom.
Getting Started with React PanelMeter 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
npm create vite@latest my-smart-app -- --template react-ts
cd my-smart-app
thennpm 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 PanelMeter component, sets the properties the demo sets and handles the change 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 { PanelMeter } from 'smart-industrial/react/panelmeter';
function App() {
// Raised when the reading is changed through the component, which only
// happens when interactive is enabled.
const handleChange = (event: CustomEvent) => {
const { value } = event.detail;
console.log('change', value);
};
return (
<PanelMeter
theme="industrial"
label="Bus"
unit="V DC"
min={0}
max={30}
value={24.1}
showValue
precisionDigits={1}
interactive
onChange={handleChange}
/>
);
}
export default App;
The sample sets interactive because the component takes input from the operator only when it is interactive.
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 { PanelMeter, PanelMeterProps } from 'smart-industrial/react/panelmeter';
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.