@procaaso/alphinity-ui-components 1.8.2 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,17 +1,16 @@
1
- import * as React$1 from 'react';
2
- import React__default from 'react';
3
- import * as react_jsx_runtime from 'react/jsx-runtime';
4
- import * as _mui_material_OverridableComponent from '@mui/material/OverridableComponent';
1
+ import * as react from 'react';
2
+ import react__default from 'react';
5
3
  import * as _emotion_styled from '@emotion/styled';
6
4
  import * as _emotion_react from '@emotion/react';
7
5
  import * as _mui_system from '@mui/system';
8
6
  import * as _mui_material from '@mui/material';
7
+ import * as _mui_material_OverridableComponent from '@mui/material/OverridableComponent';
9
8
 
10
- interface ButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
9
+ interface ButtonProps extends react__default.ButtonHTMLAttributes<HTMLButtonElement> {
11
10
  variant?: 'primary' | 'secondary';
12
- children: React__default.ReactNode;
11
+ children: react__default.ReactNode;
13
12
  }
14
- declare const Button: React__default.FC<ButtonProps>;
13
+ declare const Button: react__default.FC<ButtonProps>;
15
14
 
16
15
  interface SelectorOption {
17
16
  /** Unique value for the option */
@@ -23,7 +22,7 @@ interface SelectorOption {
23
22
  /** Optional description for tooltip or additional context */
24
23
  description?: string;
25
24
  }
26
- interface SelectorProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, 'onChange'> {
25
+ interface SelectorProps extends Omit<react__default.HTMLAttributes<HTMLDivElement>, 'onChange'> {
27
26
  /** Currently selected value */
28
27
  value: string;
29
28
  /** Callback when selection changes */
@@ -43,7 +42,7 @@ interface SelectorProps extends Omit<React__default.HTMLAttributes<HTMLDivElemen
43
42
  /** Whether the dropdown should open upward */
44
43
  dropdownUp?: boolean;
45
44
  }
46
- declare const Selector: React__default.FC<SelectorProps>;
45
+ declare const Selector: react__default.FC<SelectorProps>;
47
46
 
48
47
  /**
49
48
  * Status levels for telemetry values
@@ -189,7 +188,7 @@ interface ModeConfig {
189
188
  /** Precision for second setpoint */
190
189
  secondPrecision?: number;
191
190
  }
192
- interface ControlPanelProps extends React__default.HTMLAttributes<HTMLDivElement> {
191
+ interface ControlPanelProps extends react__default.HTMLAttributes<HTMLDivElement> {
193
192
  /** Panel title/identifier */
194
193
  title: string;
195
194
  /** Currently selected mode */
@@ -250,9 +249,9 @@ interface ControlPanelProps extends React__default.HTMLAttributes<HTMLDivElement
250
249
  /** Custom stop button text */
251
250
  stopButtonText?: string;
252
251
  }
253
- declare const ControlPanel: React__default.FC<ControlPanelProps>;
252
+ declare const ControlPanel: react__default.FC<ControlPanelProps>;
254
253
 
255
- interface StatusIndicatorProps extends React__default.HTMLAttributes<HTMLDivElement> {
254
+ interface StatusIndicatorProps extends react__default.HTMLAttributes<HTMLDivElement> {
256
255
  /** Status state determining color and behavior */
257
256
  status: 'off' | 'normal' | 'alarm' | 'warning' | 'active' | 'fault';
258
257
  /** Size of the indicator */
@@ -268,9 +267,9 @@ interface StatusIndicatorProps extends React__default.HTMLAttributes<HTMLDivElem
268
267
  /** Whether the indicator should have a 3D LED effect */
269
268
  led?: boolean;
270
269
  }
271
- declare const StatusIndicator: React__default.FC<StatusIndicatorProps>;
270
+ declare const StatusIndicator: react__default.FC<StatusIndicatorProps>;
272
271
 
273
- interface ValueEntryProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {
272
+ interface ValueEntryProps extends Omit<react__default.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {
274
273
  /** Current value */
275
274
  value: number | string;
276
275
  /** Callback when value changes */
@@ -292,9 +291,9 @@ interface ValueEntryProps extends Omit<React__default.InputHTMLAttributes<HTMLIn
292
291
  /** Whether the input is read-only */
293
292
  readOnly?: boolean;
294
293
  }
295
- declare const ValueEntry: React__default.FC<ValueEntryProps>;
294
+ declare const ValueEntry: react__default.FC<ValueEntryProps>;
296
295
 
297
- interface LegacyValueEntryProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {
296
+ interface LegacyValueEntryProps extends Omit<react__default.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {
298
297
  /** Current value */
299
298
  value: number | string;
300
299
  /** Callback when value changes */
@@ -316,7 +315,7 @@ interface LegacyValueEntryProps extends Omit<React__default.InputHTMLAttributes<
316
315
  /** Whether the input is read-only */
317
316
  readOnly?: boolean;
318
317
  }
319
- declare const LegacyValueEntry: React__default.FC<LegacyValueEntryProps>;
318
+ declare const LegacyValueEntry: react__default.FC<LegacyValueEntryProps>;
320
319
 
321
320
  interface NodeControlConfig {
322
321
  /** Node ID */
@@ -354,7 +353,7 @@ interface NodeControlConfig {
354
353
  /** Whether setpoint is read-only */
355
354
  readOnly?: boolean;
356
355
  }
357
- interface NodeControlsPanelProps extends React__default.HTMLAttributes<HTMLDivElement> {
356
+ interface NodeControlsPanelProps extends react__default.HTMLAttributes<HTMLDivElement> {
358
357
  /** Control configuration for the selected node */
359
358
  config: NodeControlConfig | null;
360
359
  /** Callback to close the panel */
@@ -373,7 +372,7 @@ interface NodeControlsPanelProps extends React__default.HTMLAttributes<HTMLDivEl
373
372
  * - Clear visual feedback
374
373
  * - Bottom or side slide-in animation
375
374
  */
376
- declare const NodeControlsPanel: React__default.FC<NodeControlsPanelProps>;
375
+ declare const NodeControlsPanel: react__default.FC<NodeControlsPanelProps>;
377
376
 
378
377
  /**
379
378
  * A custom action button rendered in the device control panel (e.g. Tare, Zero).
@@ -659,10 +658,33 @@ interface DeviceControlPanelProps {
659
658
  undockIcon?: string;
660
659
  /** Style for mode selector: 'buttons' (horizontal scroll), 'dropdown' (select), or 'modal' (click to open modal) */
661
660
  modeSelectionStyle?: 'buttons' | 'dropdown' | 'modal';
661
+ /**
662
+ * Render this panel's OWN result toast. Default true, so existing
663
+ * consumers are unchanged.
664
+ *
665
+ * Set false when the host application already surfaces command and save
666
+ * results through its own notification channel. Without it the operator
667
+ * sees two notices for one action - this panel's optimistic "command
668
+ * sent", in this panel's styling, followed by the host's message for the
669
+ * real outcome - which reads as two different mechanisms.
670
+ *
671
+ * The result still lands in `binding.state`, so a host that opts out can
672
+ * read it and render its own.
673
+ */
674
+ showBuiltInToast?: boolean;
662
675
  /** Embedded mode - uses static positioning for rendering in containers (default: false) */
663
676
  embedded?: boolean;
664
677
  }
665
- declare function DeviceControlPanel({ binding, onClose, position, align, touchOptimized, compact, fontScale, maxHeight, maxWidth, toastDuration, onModeChange, onParameterChange, onParameterActivate, onStart, onStop, startPending, stopPending, onCustomAction, onOpenConfig, showConfigButton, onUndock, undockIcon, modeSelectionStyle, embedded, }: DeviceControlPanelProps): react_jsx_runtime.JSX.Element | null;
678
+ /**
679
+ * Memoized below (kiosk heap-leak fix, same rationale as DeviceConfigPanel):
680
+ * an OPEN control panel must not re-render on host ticks whose props did not
681
+ * change. Unlike the config panel, a control binding legitimately changes when
682
+ * its live values move, so the memo bails only on genuinely idle ticks - the
683
+ * win is proportional to how often values are flat at display precision.
684
+ */
685
+ declare function DeviceControlPanelImpl({ binding, onClose, position, align, touchOptimized, compact, fontScale, maxHeight, maxWidth, toastDuration, onModeChange, onParameterChange, onParameterActivate, onStart, onStop, startPending, stopPending, onCustomAction, onOpenConfig, showConfigButton, onUndock, undockIcon, modeSelectionStyle, showBuiltInToast, embedded, }: DeviceControlPanelProps): react__default.JSX.Element | null;
686
+ /** Memo boundary - see DeviceControlPanelImpl doc comment (kiosk heap-leak fix). */
687
+ declare const DeviceControlPanel: react__default.MemoExoticComponent<typeof DeviceControlPanelImpl>;
666
688
 
667
689
  interface NumpadDialogProps {
668
690
  /** Whether the dialog is open */
@@ -711,7 +733,7 @@ interface NumpadDialogProps {
711
733
  * out-of-range values are rejected (never silently clamped). The field pre-fills
712
734
  * with the current value so an operator never blind-zeroes a live setpoint.
713
735
  */
714
- declare const NumpadDialog: React__default.FC<NumpadDialogProps>;
736
+ declare const NumpadDialog: react__default.FC<NumpadDialogProps>;
715
737
 
716
738
  type DisplayMode = 'standard' | 'dashboard';
717
739
  interface FullscreenContainerProps {
@@ -722,9 +744,9 @@ type OverlayTheme = 'tank' | 'pressure' | 'vessel' | 'flow';
722
744
  interface SVGLockedOverlayProps {
723
745
  svgX: number;
724
746
  svgY: number;
725
- children: React__default.ReactNode;
747
+ children: react__default.ReactNode;
726
748
  theme?: OverlayTheme;
727
- style?: React__default.CSSProperties;
749
+ style?: react__default.CSSProperties;
728
750
  className?: string;
729
751
  onClick?: () => void;
730
752
  containerSelector?: string;
@@ -769,20 +791,20 @@ interface EquipmentIndicatorProps {
769
791
  color: string;
770
792
  label: string;
771
793
  size?: number;
772
- style?: React__default.CSSProperties;
794
+ style?: react__default.CSSProperties;
773
795
  className?: string;
774
796
  }
775
797
  interface FullscreenWorkspaceTab {
776
798
  label: string;
777
799
  value: string;
778
- content: React__default.ReactNode;
779
- }
780
- interface FullscreenWorkspaceProps extends React__default.HTMLAttributes<HTMLDivElement> {
781
- svgContent: React__default.ReactNode;
782
- overlays?: React__default.ReactNode;
783
- leftPanel?: React__default.ReactNode;
784
- rightPanel?: React__default.ReactNode;
785
- footer?: React__default.ReactNode;
800
+ content: react__default.ReactNode;
801
+ }
802
+ interface FullscreenWorkspaceProps extends react__default.HTMLAttributes<HTMLDivElement> {
803
+ svgContent: react__default.ReactNode;
804
+ overlays?: react__default.ReactNode;
805
+ leftPanel?: react__default.ReactNode;
806
+ rightPanel?: react__default.ReactNode;
807
+ footer?: react__default.ReactNode;
786
808
  tabs?: FullscreenWorkspaceTab[];
787
809
  activeTab?: string;
788
810
  onTabChange?: (value: string) => void;
@@ -803,60 +825,60 @@ interface FullscreenWorkspaceProps extends React__default.HTMLAttributes<HTMLDiv
803
825
  zoomDisabled?: boolean;
804
826
  }
805
827
 
806
- declare const FullscreenContainer: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
828
+ declare const FullscreenContainer: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
807
829
  theme?: _emotion_react.Theme;
808
830
  } & FullscreenContainerProps, {}, {}>;
809
- declare const LeftPanel: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
831
+ declare const LeftPanel: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
810
832
  theme?: _emotion_react.Theme;
811
833
  } & {
812
834
  collapsed: boolean;
813
835
  }, {}, {}>;
814
- declare const RightPanel: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
836
+ declare const RightPanel: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
815
837
  theme?: _emotion_react.Theme;
816
838
  } & {
817
839
  collapsed: boolean;
818
840
  }, {}, {}>;
819
- declare const SVGArea: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
841
+ declare const SVGArea: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
820
842
  theme?: _emotion_react.Theme;
821
843
  }, {}, {}>;
822
- declare const LeftToggleButton: _emotion_styled.StyledComponent<_mui_material.IconButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<React$1.DetailedHTMLProps<React$1.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "children" | "className" | "disabled" | "style" | "tabIndex" | "color" | "size" | "sx" | "classes" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "loading" | "loadingIndicator"> & {
844
+ declare const LeftToggleButton: _emotion_styled.StyledComponent<_mui_material.IconButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "children" | "className" | "disabled" | "style" | "tabIndex" | "color" | "size" | "sx" | "classes" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "loading" | "loadingIndicator"> & {
823
845
  theme?: _emotion_react.Theme;
824
846
  } & {
825
847
  collapsed: boolean;
826
848
  }, {}, {}>;
827
- declare const RightToggleButton: _emotion_styled.StyledComponent<_mui_material.IconButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<React$1.DetailedHTMLProps<React$1.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "children" | "className" | "disabled" | "style" | "tabIndex" | "color" | "size" | "sx" | "classes" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "loading" | "loadingIndicator"> & {
849
+ declare const RightToggleButton: _emotion_styled.StyledComponent<_mui_material.IconButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "children" | "className" | "disabled" | "style" | "tabIndex" | "color" | "size" | "sx" | "classes" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "loading" | "loadingIndicator"> & {
828
850
  theme?: _emotion_react.Theme;
829
851
  } & {
830
852
  collapsed: boolean;
831
853
  }, {}, {}>;
832
- declare const DisplayModeToggle: _emotion_styled.StyledComponent<_mui_material.IconButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<React$1.DetailedHTMLProps<React$1.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "children" | "className" | "disabled" | "style" | "tabIndex" | "color" | "size" | "sx" | "classes" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "loading" | "loadingIndicator"> & {
854
+ declare const DisplayModeToggle: _emotion_styled.StyledComponent<_mui_material.IconButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "children" | "className" | "disabled" | "style" | "tabIndex" | "color" | "size" | "sx" | "classes" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "loading" | "loadingIndicator"> & {
833
855
  theme?: _emotion_react.Theme;
834
856
  } & {
835
857
  mode: DisplayMode;
836
858
  }, {}, {}>;
837
- declare const ZoomControls: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
859
+ declare const ZoomControls: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
838
860
  theme?: _emotion_react.Theme;
839
861
  }, {}, {}>;
840
- declare const ZoomButton: _emotion_styled.StyledComponent<_mui_material.IconButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<React$1.DetailedHTMLProps<React$1.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "children" | "className" | "disabled" | "style" | "tabIndex" | "color" | "size" | "sx" | "classes" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "loading" | "loadingIndicator"> & {
862
+ declare const ZoomButton: _emotion_styled.StyledComponent<_mui_material.IconButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "children" | "className" | "disabled" | "style" | "tabIndex" | "color" | "size" | "sx" | "classes" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "loading" | "loadingIndicator"> & {
841
863
  theme?: _emotion_react.Theme;
842
864
  }, {}, {}>;
843
- declare const FooterPanel: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
865
+ declare const FooterPanel: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
844
866
  theme?: _emotion_react.Theme;
845
867
  }, {}, {}>;
846
- declare const PanelTabs: _emotion_styled.StyledComponent<_mui_material.TabsOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "variant" | "children" | "className" | "value" | "style" | "aria-label" | "aria-labelledby" | "onChange" | "sx" | "classes" | "action" | "allowScrollButtonsMobile" | "centered" | "indicatorColor" | "orientation" | "ScrollButtonComponent" | "scrollButtons" | "selectionFollowsFocus" | "TabIndicatorProps" | "TabScrollButtonProps" | "textColor" | "visibleScrollbar" | "slots" | "slotProps"> & {
868
+ declare const PanelTabs: _emotion_styled.StyledComponent<_mui_material.TabsOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "variant" | "children" | "className" | "value" | "style" | "aria-label" | "aria-labelledby" | "onChange" | "sx" | "classes" | "action" | "allowScrollButtonsMobile" | "centered" | "indicatorColor" | "orientation" | "ScrollButtonComponent" | "scrollButtons" | "selectionFollowsFocus" | "TabIndicatorProps" | "TabScrollButtonProps" | "textColor" | "visibleScrollbar" | "slots" | "slotProps"> & {
847
869
  theme?: _emotion_react.Theme;
848
870
  }, {}, {}>;
849
- declare const PanelContent: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
871
+ declare const PanelContent: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
850
872
  theme?: _emotion_react.Theme;
851
873
  }, {}, {}>;
852
874
  declare const FixedSVGContainer: _emotion_styled.StyledComponent<{
853
875
  theme?: _emotion_react.Theme;
854
876
  as?: React.ElementType;
855
- }, React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
877
+ }, react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
856
878
  declare const ScrollableSVGWrapper: _emotion_styled.StyledComponent<{
857
879
  theme?: _emotion_react.Theme;
858
880
  as?: React.ElementType;
859
- }, React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
881
+ }, react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
860
882
 
861
883
  declare const baseOverlayStyles: {
862
884
  readonly tank: {
@@ -909,8 +931,8 @@ declare const baseOverlayStyles: {
909
931
  };
910
932
  };
911
933
  declare const overlayStyles: Record<OverlayTheme, typeof baseOverlayStyles[OverlayTheme]>;
912
- declare const SVGLockedOverlay: ({ svgX, svgY, children, theme, style, className, onClick, containerSelector, }: SVGLockedOverlayProps) => react_jsx_runtime.JSX.Element;
913
- declare const DashboardCard: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
934
+ declare const SVGLockedOverlay: ({ svgX, svgY, children, theme, style, className, onClick, containerSelector, }: SVGLockedOverlayProps) => react.JSX.Element;
935
+ declare const DashboardCard: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material.Theme>> & {
914
936
  theme?: _emotion_react.Theme;
915
937
  } & {
916
938
  svgX: number;
@@ -922,23 +944,23 @@ declare const CardHeader: _emotion_styled.StyledComponent<{
922
944
  as?: React.ElementType;
923
945
  } & {
924
946
  color?: string;
925
- }, React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
947
+ }, react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
926
948
  declare const CardValue: _emotion_styled.StyledComponent<{
927
949
  theme?: _emotion_react.Theme;
928
950
  as?: React.ElementType;
929
- }, React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
951
+ }, react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
930
952
  declare const CardUnit: _emotion_styled.StyledComponent<{
931
953
  theme?: _emotion_react.Theme;
932
954
  as?: React.ElementType;
933
- }, React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
955
+ }, react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
934
956
 
935
- declare const TrendLine: ({ values, width, height, color, strokeWidth, backgroundColor, }: TrendLineProps) => react_jsx_runtime.JSX.Element;
936
- declare const CircularGauge: ({ value, max, unit, label, size, color, }: CircularGaugeProps) => react_jsx_runtime.JSX.Element;
937
- declare const Sparkline: ({ data, width, height, color }: SparklineProps) => react_jsx_runtime.JSX.Element | null;
938
- declare const EquipmentIndicatorWithSparkline: ({ svgX, svgY, color, label, size, sparklineData, sparklineOffset, }: EquipmentIndicatorWithSparklineProps) => react_jsx_runtime.JSX.Element;
939
- declare const EquipmentIndicator: ({ svgX, svgY, color, label, size, style, className, }: EquipmentIndicatorProps) => react_jsx_runtime.JSX.Element;
957
+ declare const TrendLine: ({ values, width, height, color, strokeWidth, backgroundColor, }: TrendLineProps) => react.JSX.Element;
958
+ declare const CircularGauge: ({ value, max, unit, label, size, color, }: CircularGaugeProps) => react.JSX.Element;
959
+ declare const Sparkline: ({ data, width, height, color }: SparklineProps) => react.JSX.Element | null;
960
+ declare const EquipmentIndicatorWithSparkline: ({ svgX, svgY, color, label, size, sparklineData, sparklineOffset, }: EquipmentIndicatorWithSparklineProps) => react.JSX.Element;
961
+ declare const EquipmentIndicator: ({ svgX, svgY, color, label, size, style, className, }: EquipmentIndicatorProps) => react.JSX.Element;
940
962
 
941
- declare function FullscreenWorkspace({ svgContent, overlays, leftPanel, rightPanel, footer, tabs, activeTab, onTabChange, defaultLeftCollapsed, defaultRightCollapsed, leftCollapsed: leftCollapsedProp, rightCollapsed: rightCollapsedProp, onLeftCollapseChange, onRightCollapseChange, displayMode, defaultDisplayMode, onDisplayModeChange, showDisplayModeToggle, showZoomControls, onZoomIn, onZoomOut, onResetZoom, zoomDisabled, className, ...rest }: FullscreenWorkspaceProps): React__default.ReactElement;
963
+ declare function FullscreenWorkspace({ svgContent, overlays, leftPanel, rightPanel, footer, tabs, activeTab, onTabChange, defaultLeftCollapsed, defaultRightCollapsed, leftCollapsed: leftCollapsedProp, rightCollapsed: rightCollapsedProp, onLeftCollapseChange, onRightCollapseChange, displayMode, defaultDisplayMode, onDisplayModeChange, showDisplayModeToggle, showZoomControls, onZoomIn, onZoomOut, onResetZoom, zoomDisabled, className, ...rest }: FullscreenWorkspaceProps): react__default.ReactElement;
942
964
 
943
965
  type Theme = 'modern' | 'hmi';
944
966
  interface ThemeContextType {
@@ -948,17 +970,17 @@ interface ThemeContextType {
948
970
  }
949
971
  declare const useTheme: () => ThemeContextType;
950
972
  interface ThemeProviderProps {
951
- children: React__default.ReactNode;
973
+ children: react__default.ReactNode;
952
974
  }
953
- declare const ThemeProvider: React__default.FC<ThemeProviderProps>;
975
+ declare const ThemeProvider: react__default.FC<ThemeProviderProps>;
954
976
 
955
- interface ThemeToggleProps extends React__default.HTMLAttributes<HTMLDivElement> {
977
+ interface ThemeToggleProps extends react__default.HTMLAttributes<HTMLDivElement> {
956
978
  /** Size of the toggle */
957
979
  size?: 'small' | 'medium' | 'large';
958
980
  /** Position of the toggle */
959
981
  position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'inline';
960
982
  }
961
- declare const ThemeToggle: React__default.FC<ThemeToggleProps>;
983
+ declare const ThemeToggle: react__default.FC<ThemeToggleProps>;
962
984
 
963
985
  /**
964
986
  * ISA-101 High Performance HMI — Unified Status Color System
@@ -1427,13 +1449,13 @@ interface PIDCanvasFeatures {
1427
1449
  /** Background color for canvas (default: '#ffffff') */
1428
1450
  backgroundColor?: string;
1429
1451
  }
1430
- interface PIDCanvasProps extends React__default.HTMLAttributes<HTMLDivElement> {
1452
+ interface PIDCanvasProps extends react__default.HTMLAttributes<HTMLDivElement> {
1431
1453
  /** The diagram to render */
1432
1454
  diagram: Diagram;
1433
1455
  /** Optional className for the container */
1434
1456
  className?: string;
1435
1457
  /** Optional inline styles for the container */
1436
- style?: React__default.CSSProperties;
1458
+ style?: react__default.CSSProperties;
1437
1459
  /** Enable interactive features (pan, zoom, selection, telemetry, dragNodes) */
1438
1460
  features?: PIDCanvasFeatures;
1439
1461
  /** Callback when selection changes */
@@ -1489,20 +1511,20 @@ interface PIDCanvasControls {
1489
1511
  *
1490
1512
  * Future: Editing tools, symbol library UI
1491
1513
  */
1492
- declare function PIDCanvasImpl({ diagram, className, style, features, onSelectionChange, onNodeClick, onPipeClick, onNodeMove, onDiagramChange, onDelete, onItemsCopied, onPaste, onSymbolDrop, onPipeCreated, onMounted, telemetry, statusColorMap, ...props }: PIDCanvasProps): React__default.ReactElement;
1514
+ declare function PIDCanvasImpl({ diagram, className, style, features, onSelectionChange, onNodeClick, onPipeClick, onNodeMove, onDiagramChange, onDelete, onItemsCopied, onPaste, onSymbolDrop, onPipeCreated, onMounted, telemetry, statusColorMap, ...props }: PIDCanvasProps): react__default.ReactElement;
1493
1515
  /**
1494
1516
  * Memo boundary - see PIDCanvasImpl doc comment (renderer-OOM fix). Shallow
1495
1517
  * compare: `diagram`, `telemetry`, `features`, `style`, `statusColorMap`, and
1496
1518
  * every callback are compared by identity; hosts that keep them stable skip
1497
1519
  * the full-canvas re-render entirely when unrelated screen state changes.
1498
1520
  */
1499
- declare const PIDCanvas: React__default.MemoExoticComponent<typeof PIDCanvasImpl>;
1521
+ declare const PIDCanvas: react__default.MemoExoticComponent<typeof PIDCanvasImpl>;
1500
1522
 
1501
1523
  interface SymbolLibraryProps {
1502
1524
  /** Optional className for styling */
1503
1525
  className?: string;
1504
1526
  /** Callback when a symbol drag starts */
1505
- onSymbolDragStart?: (symbolId: string, event: React__default.DragEvent) => void;
1527
+ onSymbolDragStart?: (symbolId: string, event: react__default.DragEvent) => void;
1506
1528
  /** Show category filter */
1507
1529
  showCategories?: boolean;
1508
1530
  /** Custom symbol categories */
@@ -1514,7 +1536,7 @@ interface SymbolLibraryProps {
1514
1536
  * Displays available symbols organized by category
1515
1537
  * Supports drag-and-drop to add new nodes to diagrams
1516
1538
  */
1517
- declare function SymbolLibrary({ className, onSymbolDragStart, showCategories, categories, }: SymbolLibraryProps): React__default.ReactElement;
1539
+ declare function SymbolLibrary({ className, onSymbolDragStart, showCategories, categories, }: SymbolLibraryProps): react__default.ReactElement;
1518
1540
 
1519
1541
  interface NodeConfigPanelProps {
1520
1542
  /** Selected node to configure */
@@ -1532,7 +1554,7 @@ interface NodeConfigPanelProps {
1532
1554
  /** Additional CSS class name */
1533
1555
  className?: string;
1534
1556
  /** Custom styles */
1535
- style?: React__default.CSSProperties;
1557
+ style?: react__default.CSSProperties;
1536
1558
  }
1537
1559
  /**
1538
1560
  * NodeConfigPanel - Reusable configuration panel for editing node properties and telemetry
@@ -1548,7 +1570,7 @@ interface NodeConfigPanelProps {
1548
1570
  * />
1549
1571
  * ```
1550
1572
  */
1551
- declare function NodeConfigPanel({ node, binding, onUpdateNode, onUpdateTelemetry, onAddTelemetry, onRemove, className, style, }: NodeConfigPanelProps): react_jsx_runtime.JSX.Element;
1573
+ declare function NodeConfigPanel({ node, binding, onUpdateNode, onUpdateTelemetry, onAddTelemetry, onRemove, className, style, }: NodeConfigPanelProps): react__default.JSX.Element;
1552
1574
 
1553
1575
  /**
1554
1576
  * Validates a diagram object structure
@@ -1967,10 +1989,36 @@ interface DeviceConfigPanelProps {
1967
1989
  onOpenControls?: () => void;
1968
1990
  /** Show controls button in header */
1969
1991
  showControlsButton?: boolean;
1992
+ /**
1993
+ * Render this panel's OWN result toast. Default true, so existing
1994
+ * consumers are unchanged.
1995
+ *
1996
+ * Set false when the host application already surfaces command and save
1997
+ * results through its own notification channel. Without it the operator
1998
+ * sees two notices for one action - this panel's optimistic "command
1999
+ * sent", in this panel's styling, followed by the host's message for the
2000
+ * real outcome - which reads as two different mechanisms.
2001
+ *
2002
+ * The result still lands in `binding.state`, so a host that opts out can
2003
+ * read it and render its own.
2004
+ */
2005
+ showBuiltInToast?: boolean;
1970
2006
  /** Embedded mode - uses static positioning for rendering in containers (default: false) */
1971
2007
  embedded?: boolean;
1972
2008
  }
1973
- declare function DeviceConfigPanel({ binding, onClose, onUndock, undockIcon, position, align, touchOptimized, compact, fontScale, maxHeight, maxWidth, toastDuration, onOpenControls, showControlsButton, embedded, }: DeviceConfigPanelProps): react_jsx_runtime.JSX.Element | null;
2009
+ /**
2010
+ * Memoized below (kiosk heap-leak fix): a host whose screen re-renders ~1Hz on
2011
+ * telemetry must not re-render an OPEN config panel every tick - each pass
2012
+ * re-creates the panel's handler closures and re-binds its MUI event handlers,
2013
+ * and on the kiosk those generations were RETAINED (~100 closures/sec,
2014
+ * ~2.1 MB/min heap growth -> renderer OOM at the 512 MB cap, heap-snapshot
2015
+ * fingerprint: Context/scope buckets + onSave/onReset closures). The memo only
2016
+ * pays off when the host passes identity-stable `binding` and handler props;
2017
+ * an unstable host degrades gracefully to the old behavior.
2018
+ */
2019
+ declare function DeviceConfigPanelImpl({ binding, onClose, onUndock, undockIcon, position, align, touchOptimized, compact, fontScale, maxHeight, maxWidth, toastDuration, onOpenControls, showControlsButton, showBuiltInToast, embedded, }: DeviceConfigPanelProps): react__default.JSX.Element | null;
2020
+ /** Memo boundary - see DeviceConfigPanelImpl doc comment (kiosk heap-leak fix). */
2021
+ declare const DeviceConfigPanel: react__default.MemoExoticComponent<typeof DeviceConfigPanelImpl>;
1974
2022
 
1975
2023
  /**
1976
2024
  * Options for simulation behavior