@procaaso/alphinity-ui-components 1.10.0 → 1.11.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
@@ -327,6 +327,8 @@ interface StatusIndicatorProps extends react__default.HTMLAttributes<HTMLDivElem
327
327
  shape?: 'circle' | 'square' | 'diamond';
328
328
  /** Whether the indicator should have a 3D LED effect */
329
329
  led?: boolean;
330
+ /** Whether the indicator is rendered at all. When false, nothing is rendered. Defaults to true. */
331
+ visible?: boolean;
330
332
  /**
331
333
  * True when the underlying tag's state is a maintenance force, not a
332
334
  * measured reading (#3607, R19). Renders a small glyph badge, never a
@@ -1173,6 +1175,18 @@ declare const DEFAULT_STATUS_COLORS: Record<DeviceStatus, StatusColorEntry>;
1173
1175
  * outlines a forced value's box/ring so it stays findable at a glance.
1174
1176
  */
1175
1177
  declare const FORCED_MARK_COLOR: StatusColorEntry;
1178
+ /**
1179
+ * Position-unknown marking color (views-library #27). Deliberately outside
1180
+ * DEFAULT_STATUS_COLORS, for the same reason as FORCED_MARK_COLOR: a device
1181
+ * whose position the control system has disclaimed is not a health status,
1182
+ * and must not compete with warning/alarm/fault. Values match the consuming
1183
+ * HMI ISA token module (light theme).
1184
+ *
1185
+ * `fill` is the pattern background, `text` is the hatch line color.
1186
+ */
1187
+ declare const UNKNOWN_MARK_COLOR: StatusColorEntry;
1188
+ /** Dark-theme values for UNKNOWN_MARK_COLOR. */
1189
+ declare const UNKNOWN_MARK_COLOR_DARK: StatusColorEntry;
1176
1190
  /**
1177
1191
  * Resolve a status string to a full color entry.
1178
1192
  *
@@ -1198,6 +1212,13 @@ interface NodeInstance {
1198
1212
  fill?: string;
1199
1213
  stroke?: string;
1200
1214
  };
1215
+ /**
1216
+ * Opt-in. True when the control system has disclaimed this device's position
1217
+ * (for example a valve with bad limit-switch feedback). The symbol renders
1218
+ * with a diagonal hatch, a non-colour cue, so it differs from a CLOSED
1219
+ * symbol. Default off. Wins over status and customColors.
1220
+ */
1221
+ positionUnknown?: boolean;
1201
1222
  metadata?: Record<string, unknown>;
1202
1223
  }
1203
1224
  interface Transform {
@@ -1495,6 +1516,34 @@ interface UseTelemetryStatusOptions {
1495
1516
  */
1496
1517
  declare function useTelemetryStatus(telemetry: TelemetryMap, diagram: Diagram, setDiagram: (diagram: Diagram) => void, options?: UseTelemetryStatusOptions): void;
1497
1518
 
1519
+ /** Options for the signal-binding sync. */
1520
+ interface UseBooleanIndicatorsOptions {
1521
+ /** Whether the sync is enabled (default: true). Disable in edit mode. */
1522
+ enabled?: boolean;
1523
+ /** Symbol id treated as a status indicator (default: 'status-indicator'). */
1524
+ symbolId?: string;
1525
+ }
1526
+ /**
1527
+ * Drive a status-indicator node's color and visibility from independent named
1528
+ * signals.
1529
+ *
1530
+ * Each indicator node names two tags in its metadata:
1531
+ * - `colorSource` — a tag whose truthy value shows `onColor`, falsy shows `offColor`.
1532
+ * - `visibleSource` — a tag whose truthy value shows the node, falsy hides it.
1533
+ *
1534
+ * Both are resolved against a tag → value index built from every published
1535
+ * telemetry binding, so color and visibility can follow completely different
1536
+ * signals. A blank source leaves that property alone (color unbound, visibility
1537
+ * static). Writes `customColors.fill` and `visible` — never touches the renderer
1538
+ * props, so the NodeRenderer memo boundary stays intact.
1539
+ *
1540
+ * @example
1541
+ * ```tsx
1542
+ * useBooleanIndicators(telemetry, diagram, setDiagram, { enabled: mode === 'runtime' });
1543
+ * ```
1544
+ */
1545
+ declare function useBooleanIndicators(telemetry: TelemetryMap, diagram: Diagram, setDiagram: (diagram: Diagram) => void, options?: UseBooleanIndicatorsOptions): void;
1546
+
1498
1547
  interface DragPoint {
1499
1548
  x: number;
1500
1549
  y: number;
@@ -1704,6 +1753,10 @@ interface NodeConfigPanelProps {
1704
1753
  onUpdateTelemetry: (updates: any) => void;
1705
1754
  /** Callback when telemetry binding is added for the first time */
1706
1755
  onAddTelemetry?: () => void;
1756
+ /** Callback to remove/clear the telemetry binding for this node */
1757
+ onRemoveTelemetry?: () => void;
1758
+ /** Known signal/tag names, used to autocomplete and validate 'tag' fields. */
1759
+ availableTags?: string[];
1707
1760
  /** Callback when node is removed */
1708
1761
  onRemove: () => void;
1709
1762
  /** Additional CSS class name */
@@ -1725,7 +1778,7 @@ interface NodeConfigPanelProps {
1725
1778
  * />
1726
1779
  * ```
1727
1780
  */
1728
- declare function NodeConfigPanel({ node, binding, onUpdateNode, onUpdateTelemetry, onAddTelemetry, onRemove, className, style, }: NodeConfigPanelProps): react__default.JSX.Element;
1781
+ declare function NodeConfigPanel({ node, binding, onUpdateNode, onUpdateTelemetry, onAddTelemetry, onRemoveTelemetry, availableTags, onRemove, className, style, }: NodeConfigPanelProps): react__default.JSX.Element;
1729
1782
 
1730
1783
  /**
1731
1784
  * Validates a diagram object structure
@@ -1806,6 +1859,60 @@ declare function getSymbolDefinition(symbolId: string): SymbolDefinition | undef
1806
1859
  */
1807
1860
  declare function getAvailableSymbols(): string[];
1808
1861
 
1862
+ /**
1863
+ * Appearance schema — the reusable contract for per-element editable properties.
1864
+ *
1865
+ * A placeable element declares its editable appearance fields as data. The
1866
+ * properties panel (NodeConfigPanel) renders any schema generically, and the
1867
+ * renderer (NodeRenderer) reads the same defaults. Add a new element by adding
1868
+ * one schema entry — no panel code changes. This is the pattern the
1869
+ * "add a placeable element" skill generates.
1870
+ */
1871
+ type AppearanceFieldKind = 'select' | 'boolean' | 'number' | 'text' | 'tag';
1872
+ /**
1873
+ * Where a field's value is read from and written to on the NodeInstance.
1874
+ * - 'metadata' (default): the untyped node.metadata bag, keyed by field.key
1875
+ * - 'visible': the node.visible flag
1876
+ * - 'scale': node.transform.scale (via valueMap for select options)
1877
+ */
1878
+ type AppearanceTarget = 'metadata' | 'visible' | 'scale';
1879
+ interface AppearanceField {
1880
+ /** metadata key, or the driver for the special 'visible'/'scale' targets */
1881
+ key: string;
1882
+ kind: AppearanceFieldKind;
1883
+ /** Human label for the panel; defaults to key when absent */
1884
+ label?: string;
1885
+ /** Options for kind 'select' */
1886
+ options?: string[];
1887
+ /** Where the value is stored; defaults to 'metadata' */
1888
+ target?: AppearanceTarget;
1889
+ /** Default value when the node has no value set */
1890
+ default?: string | number | boolean;
1891
+ /** For target 'scale': maps a select option to a numeric scale factor */
1892
+ valueMap?: Record<string, number>;
1893
+ /** Optional help text shown under the control in the panel */
1894
+ help?: string;
1895
+ }
1896
+ type AppearanceValue = string | number | boolean;
1897
+ /** Named color presets for the boolean indicator (name → hex). */
1898
+ declare const COLOR_PRESETS: Record<string, string>;
1899
+ /** Resolve a color preset name to a hex value, falling back to grey. */
1900
+ declare function resolvePresetColor(name: string | undefined): string;
1901
+ /** Appearance schema for the Status LED symbol. */
1902
+ declare const STATUS_LED_APPEARANCE: AppearanceField[];
1903
+ /** Return the editable appearance fields for a symbol, or [] if it declares none. */
1904
+ declare function getAppearanceSchema(symbolId: string): AppearanceField[];
1905
+ /**
1906
+ * Default values for the 'metadata'-targeted fields of a symbol, keyed by field key.
1907
+ * The renderer merges these under the node's own metadata, so a freshly dropped
1908
+ * element looks correct before any editing.
1909
+ */
1910
+ declare function getAppearanceDefaults(symbolId: string): Record<string, AppearanceValue>;
1911
+ /** Read the current value of a field from a node, applying the field default. */
1912
+ declare function readAppearanceValue(node: NodeInstance, field: AppearanceField): AppearanceValue;
1913
+ /** Produce the NodeInstance update for a new field value. */
1914
+ declare function writeAppearanceValue(node: NodeInstance, field: AppearanceField, value: AppearanceValue): Partial<NodeInstance>;
1915
+
1809
1916
  /**
1810
1917
  * Telemetry status type
1811
1918
  */
@@ -2222,4 +2329,4 @@ interface SimulationOptions {
2222
2329
  */
2223
2330
  declare function useSimulation(telemetry: TelemetryMap, updateTelemetryBatch: (updates: Array<any>) => void, options?: SimulationOptions): void;
2224
2331
 
2225
- export { type AnchorType, Button, type ButtonProps, CardHeader, CardUnit, CardValue, CircularGauge, type CircularGaugeProps, type CommandKind, type ConfigActions, type ConfigDisplay, type ConfigParameter, type ConfigSection, type ConfigState, type ConfigTheme, type ControlCapabilities, type ControlMode, ControlPanel, type ControlPanelProps, type ControlParameter, type ControlState, type CustomAction, DEFAULT_STATUS_COLORS, DEFAULT_THRESHOLDS, DashboardCard, type DataBinding, type DeviceConfigBinding, type DeviceConfigMap, DeviceConfigPanel, type DeviceConfigPanelProps, type DeviceControlBinding, type DeviceControlMap, DeviceControlPanel, type DeviceControlPanelProps, type DeviceStatus, type Diagram, type DiagramMetadata, type DisplayMode, DisplayModeToggle, type DragPoint, type DragState, EquipmentIndicator, type EquipmentIndicatorProps, EquipmentIndicatorWithSparkline, type EquipmentIndicatorWithSparklineProps, FORCED_MARK_COLOR, FixedSVGContainer, FooterPanel, type ForcedState, FullscreenContainer, FullscreenWorkspace, type FullscreenWorkspaceProps, type FullscreenWorkspaceTab, type KeyboardShortcutsOptions, LeftPanel, LeftToggleButton, LegacyValueEntry, type LegacyValueEntryProps, type ModeConfig, NodeConfigPanel, type NodeConfigPanelProps, type NodeControlConfig, NodeControlsPanel, type NodeControlsPanelProps, type NodeInstance, NumpadDialog, type NumpadDialogProps, type Overlay, type OverlayContent, type OverlayTheme, type OverlayType, PIDCanvas, type PIDCanvasControls, type PIDCanvasFeatures, type PIDCanvasProps, PanelContent, PanelTabs, type PipeEdge, type PipeStyle, type Point, type PortDefinition, type PortInstance, type PortType, RightPanel, RightToggleButton, SVGArea, SVGLockedOverlay, type SVGLockedOverlayProps, type ScalingMetadata, ScrollableSVGWrapper, type SelectionState, Selector, type SelectorOption, type SelectorProps, type SimulationOptions, Sparkline, type SparklineProps, type StatusColorEntry, type StatusColorMap, StatusIndicator, type StatusIndicatorProps, type SymbolCategory, type SymbolDefinition, SymbolLibrary, type SymbolLibraryProps, type SymbolMetadata, type TelemetryBinding, type TelemetryMap, type TelemetryStatus$1 as TelemetryStatus, type TelemetryValue, ThemeProvider, ThemeToggle, type ThemeToggleProps, type Thresholds, type Transform, TrendLine, type TrendLineProps, type UseDeviceControlsOptions, type UseDragOptions, type UseDragResult, type UseSelectionOptions, type UseSelectionResult, type UseTelemetryOptions, type UseTelemetryResult, type UseTelemetryStatusOptions, type UseViewBoxOptions, type UseViewBoxResult, ValueEntry, type ValueEntryProps, type ViewBox, ZoomButton, ZoomControls, calculateThresholdStatus, createConfigBinding, createControlBinding, exampleDiagram, exportDiagram, generateRoutePoints, getAvailableSymbols, getPortWorldPosition, getSymbolDefinition, importDiagram, mockSymbolLibrary, nodeHasPort, overlayStyles, registerSymbol, registerSymbols, resolveStatusColor, useDeviceConfigs, useDeviceControls, useDrag, useKeyboardShortcuts, useSelection, useSimulation, useTelemetry, useTelemetryStatus, useTheme, useViewBox, validateDiagram };
2332
+ export { type AnchorType, type AppearanceField, type AppearanceFieldKind, type AppearanceTarget, type AppearanceValue, Button, type ButtonProps, COLOR_PRESETS, CardHeader, CardUnit, CardValue, CircularGauge, type CircularGaugeProps, type CommandKind, type ConfigActions, type ConfigDisplay, type ConfigParameter, type ConfigSection, type ConfigState, type ConfigTheme, type ControlCapabilities, type ControlMode, ControlPanel, type ControlPanelProps, type ControlParameter, type ControlState, type CustomAction, DEFAULT_STATUS_COLORS, DEFAULT_THRESHOLDS, DashboardCard, type DataBinding, type DeviceConfigBinding, type DeviceConfigMap, DeviceConfigPanel, type DeviceConfigPanelProps, type DeviceControlBinding, type DeviceControlMap, DeviceControlPanel, type DeviceControlPanelProps, type DeviceStatus, type Diagram, type DiagramMetadata, type DisplayMode, DisplayModeToggle, type DragPoint, type DragState, EquipmentIndicator, type EquipmentIndicatorProps, EquipmentIndicatorWithSparkline, type EquipmentIndicatorWithSparklineProps, FORCED_MARK_COLOR, FixedSVGContainer, FooterPanel, type ForcedState, FullscreenContainer, FullscreenWorkspace, type FullscreenWorkspaceProps, type FullscreenWorkspaceTab, type KeyboardShortcutsOptions, LeftPanel, LeftToggleButton, LegacyValueEntry, type LegacyValueEntryProps, type ModeConfig, NodeConfigPanel, type NodeConfigPanelProps, type NodeControlConfig, NodeControlsPanel, type NodeControlsPanelProps, type NodeInstance, NumpadDialog, type NumpadDialogProps, type Overlay, type OverlayContent, type OverlayTheme, type OverlayType, PIDCanvas, type PIDCanvasControls, type PIDCanvasFeatures, type PIDCanvasProps, PanelContent, PanelTabs, type PipeEdge, type PipeStyle, type Point, type PortDefinition, type PortInstance, type PortType, RightPanel, RightToggleButton, STATUS_LED_APPEARANCE, SVGArea, SVGLockedOverlay, type SVGLockedOverlayProps, type ScalingMetadata, ScrollableSVGWrapper, type SelectionState, Selector, type SelectorOption, type SelectorProps, type SimulationOptions, Sparkline, type SparklineProps, type StatusColorEntry, type StatusColorMap, StatusIndicator, type StatusIndicatorProps, type SymbolCategory, type SymbolDefinition, SymbolLibrary, type SymbolLibraryProps, type SymbolMetadata, type TelemetryBinding, type TelemetryMap, type TelemetryStatus$1 as TelemetryStatus, type TelemetryValue, ThemeProvider, ThemeToggle, type ThemeToggleProps, type Thresholds, type Transform, TrendLine, type TrendLineProps, UNKNOWN_MARK_COLOR, UNKNOWN_MARK_COLOR_DARK, type UseBooleanIndicatorsOptions, type UseDeviceControlsOptions, type UseDragOptions, type UseDragResult, type UseSelectionOptions, type UseSelectionResult, type UseTelemetryOptions, type UseTelemetryResult, type UseTelemetryStatusOptions, type UseViewBoxOptions, type UseViewBoxResult, ValueEntry, type ValueEntryProps, type ViewBox, ZoomButton, ZoomControls, calculateThresholdStatus, createConfigBinding, createControlBinding, exampleDiagram, exportDiagram, generateRoutePoints, getAppearanceDefaults, getAppearanceSchema, getAvailableSymbols, getPortWorldPosition, getSymbolDefinition, importDiagram, mockSymbolLibrary, nodeHasPort, overlayStyles, readAppearanceValue, registerSymbol, registerSymbols, resolvePresetColor, resolveStatusColor, useBooleanIndicators, useDeviceConfigs, useDeviceControls, useDrag, useKeyboardShortcuts, useSelection, useSimulation, useTelemetry, useTelemetryStatus, useTheme, useViewBox, validateDiagram, writeAppearanceValue };
package/dist/index.d.ts CHANGED
@@ -327,6 +327,8 @@ interface StatusIndicatorProps extends react__default.HTMLAttributes<HTMLDivElem
327
327
  shape?: 'circle' | 'square' | 'diamond';
328
328
  /** Whether the indicator should have a 3D LED effect */
329
329
  led?: boolean;
330
+ /** Whether the indicator is rendered at all. When false, nothing is rendered. Defaults to true. */
331
+ visible?: boolean;
330
332
  /**
331
333
  * True when the underlying tag's state is a maintenance force, not a
332
334
  * measured reading (#3607, R19). Renders a small glyph badge, never a
@@ -1173,6 +1175,18 @@ declare const DEFAULT_STATUS_COLORS: Record<DeviceStatus, StatusColorEntry>;
1173
1175
  * outlines a forced value's box/ring so it stays findable at a glance.
1174
1176
  */
1175
1177
  declare const FORCED_MARK_COLOR: StatusColorEntry;
1178
+ /**
1179
+ * Position-unknown marking color (views-library #27). Deliberately outside
1180
+ * DEFAULT_STATUS_COLORS, for the same reason as FORCED_MARK_COLOR: a device
1181
+ * whose position the control system has disclaimed is not a health status,
1182
+ * and must not compete with warning/alarm/fault. Values match the consuming
1183
+ * HMI ISA token module (light theme).
1184
+ *
1185
+ * `fill` is the pattern background, `text` is the hatch line color.
1186
+ */
1187
+ declare const UNKNOWN_MARK_COLOR: StatusColorEntry;
1188
+ /** Dark-theme values for UNKNOWN_MARK_COLOR. */
1189
+ declare const UNKNOWN_MARK_COLOR_DARK: StatusColorEntry;
1176
1190
  /**
1177
1191
  * Resolve a status string to a full color entry.
1178
1192
  *
@@ -1198,6 +1212,13 @@ interface NodeInstance {
1198
1212
  fill?: string;
1199
1213
  stroke?: string;
1200
1214
  };
1215
+ /**
1216
+ * Opt-in. True when the control system has disclaimed this device's position
1217
+ * (for example a valve with bad limit-switch feedback). The symbol renders
1218
+ * with a diagonal hatch, a non-colour cue, so it differs from a CLOSED
1219
+ * symbol. Default off. Wins over status and customColors.
1220
+ */
1221
+ positionUnknown?: boolean;
1201
1222
  metadata?: Record<string, unknown>;
1202
1223
  }
1203
1224
  interface Transform {
@@ -1495,6 +1516,34 @@ interface UseTelemetryStatusOptions {
1495
1516
  */
1496
1517
  declare function useTelemetryStatus(telemetry: TelemetryMap, diagram: Diagram, setDiagram: (diagram: Diagram) => void, options?: UseTelemetryStatusOptions): void;
1497
1518
 
1519
+ /** Options for the signal-binding sync. */
1520
+ interface UseBooleanIndicatorsOptions {
1521
+ /** Whether the sync is enabled (default: true). Disable in edit mode. */
1522
+ enabled?: boolean;
1523
+ /** Symbol id treated as a status indicator (default: 'status-indicator'). */
1524
+ symbolId?: string;
1525
+ }
1526
+ /**
1527
+ * Drive a status-indicator node's color and visibility from independent named
1528
+ * signals.
1529
+ *
1530
+ * Each indicator node names two tags in its metadata:
1531
+ * - `colorSource` — a tag whose truthy value shows `onColor`, falsy shows `offColor`.
1532
+ * - `visibleSource` — a tag whose truthy value shows the node, falsy hides it.
1533
+ *
1534
+ * Both are resolved against a tag → value index built from every published
1535
+ * telemetry binding, so color and visibility can follow completely different
1536
+ * signals. A blank source leaves that property alone (color unbound, visibility
1537
+ * static). Writes `customColors.fill` and `visible` — never touches the renderer
1538
+ * props, so the NodeRenderer memo boundary stays intact.
1539
+ *
1540
+ * @example
1541
+ * ```tsx
1542
+ * useBooleanIndicators(telemetry, diagram, setDiagram, { enabled: mode === 'runtime' });
1543
+ * ```
1544
+ */
1545
+ declare function useBooleanIndicators(telemetry: TelemetryMap, diagram: Diagram, setDiagram: (diagram: Diagram) => void, options?: UseBooleanIndicatorsOptions): void;
1546
+
1498
1547
  interface DragPoint {
1499
1548
  x: number;
1500
1549
  y: number;
@@ -1704,6 +1753,10 @@ interface NodeConfigPanelProps {
1704
1753
  onUpdateTelemetry: (updates: any) => void;
1705
1754
  /** Callback when telemetry binding is added for the first time */
1706
1755
  onAddTelemetry?: () => void;
1756
+ /** Callback to remove/clear the telemetry binding for this node */
1757
+ onRemoveTelemetry?: () => void;
1758
+ /** Known signal/tag names, used to autocomplete and validate 'tag' fields. */
1759
+ availableTags?: string[];
1707
1760
  /** Callback when node is removed */
1708
1761
  onRemove: () => void;
1709
1762
  /** Additional CSS class name */
@@ -1725,7 +1778,7 @@ interface NodeConfigPanelProps {
1725
1778
  * />
1726
1779
  * ```
1727
1780
  */
1728
- declare function NodeConfigPanel({ node, binding, onUpdateNode, onUpdateTelemetry, onAddTelemetry, onRemove, className, style, }: NodeConfigPanelProps): react__default.JSX.Element;
1781
+ declare function NodeConfigPanel({ node, binding, onUpdateNode, onUpdateTelemetry, onAddTelemetry, onRemoveTelemetry, availableTags, onRemove, className, style, }: NodeConfigPanelProps): react__default.JSX.Element;
1729
1782
 
1730
1783
  /**
1731
1784
  * Validates a diagram object structure
@@ -1806,6 +1859,60 @@ declare function getSymbolDefinition(symbolId: string): SymbolDefinition | undef
1806
1859
  */
1807
1860
  declare function getAvailableSymbols(): string[];
1808
1861
 
1862
+ /**
1863
+ * Appearance schema — the reusable contract for per-element editable properties.
1864
+ *
1865
+ * A placeable element declares its editable appearance fields as data. The
1866
+ * properties panel (NodeConfigPanel) renders any schema generically, and the
1867
+ * renderer (NodeRenderer) reads the same defaults. Add a new element by adding
1868
+ * one schema entry — no panel code changes. This is the pattern the
1869
+ * "add a placeable element" skill generates.
1870
+ */
1871
+ type AppearanceFieldKind = 'select' | 'boolean' | 'number' | 'text' | 'tag';
1872
+ /**
1873
+ * Where a field's value is read from and written to on the NodeInstance.
1874
+ * - 'metadata' (default): the untyped node.metadata bag, keyed by field.key
1875
+ * - 'visible': the node.visible flag
1876
+ * - 'scale': node.transform.scale (via valueMap for select options)
1877
+ */
1878
+ type AppearanceTarget = 'metadata' | 'visible' | 'scale';
1879
+ interface AppearanceField {
1880
+ /** metadata key, or the driver for the special 'visible'/'scale' targets */
1881
+ key: string;
1882
+ kind: AppearanceFieldKind;
1883
+ /** Human label for the panel; defaults to key when absent */
1884
+ label?: string;
1885
+ /** Options for kind 'select' */
1886
+ options?: string[];
1887
+ /** Where the value is stored; defaults to 'metadata' */
1888
+ target?: AppearanceTarget;
1889
+ /** Default value when the node has no value set */
1890
+ default?: string | number | boolean;
1891
+ /** For target 'scale': maps a select option to a numeric scale factor */
1892
+ valueMap?: Record<string, number>;
1893
+ /** Optional help text shown under the control in the panel */
1894
+ help?: string;
1895
+ }
1896
+ type AppearanceValue = string | number | boolean;
1897
+ /** Named color presets for the boolean indicator (name → hex). */
1898
+ declare const COLOR_PRESETS: Record<string, string>;
1899
+ /** Resolve a color preset name to a hex value, falling back to grey. */
1900
+ declare function resolvePresetColor(name: string | undefined): string;
1901
+ /** Appearance schema for the Status LED symbol. */
1902
+ declare const STATUS_LED_APPEARANCE: AppearanceField[];
1903
+ /** Return the editable appearance fields for a symbol, or [] if it declares none. */
1904
+ declare function getAppearanceSchema(symbolId: string): AppearanceField[];
1905
+ /**
1906
+ * Default values for the 'metadata'-targeted fields of a symbol, keyed by field key.
1907
+ * The renderer merges these under the node's own metadata, so a freshly dropped
1908
+ * element looks correct before any editing.
1909
+ */
1910
+ declare function getAppearanceDefaults(symbolId: string): Record<string, AppearanceValue>;
1911
+ /** Read the current value of a field from a node, applying the field default. */
1912
+ declare function readAppearanceValue(node: NodeInstance, field: AppearanceField): AppearanceValue;
1913
+ /** Produce the NodeInstance update for a new field value. */
1914
+ declare function writeAppearanceValue(node: NodeInstance, field: AppearanceField, value: AppearanceValue): Partial<NodeInstance>;
1915
+
1809
1916
  /**
1810
1917
  * Telemetry status type
1811
1918
  */
@@ -2222,4 +2329,4 @@ interface SimulationOptions {
2222
2329
  */
2223
2330
  declare function useSimulation(telemetry: TelemetryMap, updateTelemetryBatch: (updates: Array<any>) => void, options?: SimulationOptions): void;
2224
2331
 
2225
- export { type AnchorType, Button, type ButtonProps, CardHeader, CardUnit, CardValue, CircularGauge, type CircularGaugeProps, type CommandKind, type ConfigActions, type ConfigDisplay, type ConfigParameter, type ConfigSection, type ConfigState, type ConfigTheme, type ControlCapabilities, type ControlMode, ControlPanel, type ControlPanelProps, type ControlParameter, type ControlState, type CustomAction, DEFAULT_STATUS_COLORS, DEFAULT_THRESHOLDS, DashboardCard, type DataBinding, type DeviceConfigBinding, type DeviceConfigMap, DeviceConfigPanel, type DeviceConfigPanelProps, type DeviceControlBinding, type DeviceControlMap, DeviceControlPanel, type DeviceControlPanelProps, type DeviceStatus, type Diagram, type DiagramMetadata, type DisplayMode, DisplayModeToggle, type DragPoint, type DragState, EquipmentIndicator, type EquipmentIndicatorProps, EquipmentIndicatorWithSparkline, type EquipmentIndicatorWithSparklineProps, FORCED_MARK_COLOR, FixedSVGContainer, FooterPanel, type ForcedState, FullscreenContainer, FullscreenWorkspace, type FullscreenWorkspaceProps, type FullscreenWorkspaceTab, type KeyboardShortcutsOptions, LeftPanel, LeftToggleButton, LegacyValueEntry, type LegacyValueEntryProps, type ModeConfig, NodeConfigPanel, type NodeConfigPanelProps, type NodeControlConfig, NodeControlsPanel, type NodeControlsPanelProps, type NodeInstance, NumpadDialog, type NumpadDialogProps, type Overlay, type OverlayContent, type OverlayTheme, type OverlayType, PIDCanvas, type PIDCanvasControls, type PIDCanvasFeatures, type PIDCanvasProps, PanelContent, PanelTabs, type PipeEdge, type PipeStyle, type Point, type PortDefinition, type PortInstance, type PortType, RightPanel, RightToggleButton, SVGArea, SVGLockedOverlay, type SVGLockedOverlayProps, type ScalingMetadata, ScrollableSVGWrapper, type SelectionState, Selector, type SelectorOption, type SelectorProps, type SimulationOptions, Sparkline, type SparklineProps, type StatusColorEntry, type StatusColorMap, StatusIndicator, type StatusIndicatorProps, type SymbolCategory, type SymbolDefinition, SymbolLibrary, type SymbolLibraryProps, type SymbolMetadata, type TelemetryBinding, type TelemetryMap, type TelemetryStatus$1 as TelemetryStatus, type TelemetryValue, ThemeProvider, ThemeToggle, type ThemeToggleProps, type Thresholds, type Transform, TrendLine, type TrendLineProps, type UseDeviceControlsOptions, type UseDragOptions, type UseDragResult, type UseSelectionOptions, type UseSelectionResult, type UseTelemetryOptions, type UseTelemetryResult, type UseTelemetryStatusOptions, type UseViewBoxOptions, type UseViewBoxResult, ValueEntry, type ValueEntryProps, type ViewBox, ZoomButton, ZoomControls, calculateThresholdStatus, createConfigBinding, createControlBinding, exampleDiagram, exportDiagram, generateRoutePoints, getAvailableSymbols, getPortWorldPosition, getSymbolDefinition, importDiagram, mockSymbolLibrary, nodeHasPort, overlayStyles, registerSymbol, registerSymbols, resolveStatusColor, useDeviceConfigs, useDeviceControls, useDrag, useKeyboardShortcuts, useSelection, useSimulation, useTelemetry, useTelemetryStatus, useTheme, useViewBox, validateDiagram };
2332
+ export { type AnchorType, type AppearanceField, type AppearanceFieldKind, type AppearanceTarget, type AppearanceValue, Button, type ButtonProps, COLOR_PRESETS, CardHeader, CardUnit, CardValue, CircularGauge, type CircularGaugeProps, type CommandKind, type ConfigActions, type ConfigDisplay, type ConfigParameter, type ConfigSection, type ConfigState, type ConfigTheme, type ControlCapabilities, type ControlMode, ControlPanel, type ControlPanelProps, type ControlParameter, type ControlState, type CustomAction, DEFAULT_STATUS_COLORS, DEFAULT_THRESHOLDS, DashboardCard, type DataBinding, type DeviceConfigBinding, type DeviceConfigMap, DeviceConfigPanel, type DeviceConfigPanelProps, type DeviceControlBinding, type DeviceControlMap, DeviceControlPanel, type DeviceControlPanelProps, type DeviceStatus, type Diagram, type DiagramMetadata, type DisplayMode, DisplayModeToggle, type DragPoint, type DragState, EquipmentIndicator, type EquipmentIndicatorProps, EquipmentIndicatorWithSparkline, type EquipmentIndicatorWithSparklineProps, FORCED_MARK_COLOR, FixedSVGContainer, FooterPanel, type ForcedState, FullscreenContainer, FullscreenWorkspace, type FullscreenWorkspaceProps, type FullscreenWorkspaceTab, type KeyboardShortcutsOptions, LeftPanel, LeftToggleButton, LegacyValueEntry, type LegacyValueEntryProps, type ModeConfig, NodeConfigPanel, type NodeConfigPanelProps, type NodeControlConfig, NodeControlsPanel, type NodeControlsPanelProps, type NodeInstance, NumpadDialog, type NumpadDialogProps, type Overlay, type OverlayContent, type OverlayTheme, type OverlayType, PIDCanvas, type PIDCanvasControls, type PIDCanvasFeatures, type PIDCanvasProps, PanelContent, PanelTabs, type PipeEdge, type PipeStyle, type Point, type PortDefinition, type PortInstance, type PortType, RightPanel, RightToggleButton, STATUS_LED_APPEARANCE, SVGArea, SVGLockedOverlay, type SVGLockedOverlayProps, type ScalingMetadata, ScrollableSVGWrapper, type SelectionState, Selector, type SelectorOption, type SelectorProps, type SimulationOptions, Sparkline, type SparklineProps, type StatusColorEntry, type StatusColorMap, StatusIndicator, type StatusIndicatorProps, type SymbolCategory, type SymbolDefinition, SymbolLibrary, type SymbolLibraryProps, type SymbolMetadata, type TelemetryBinding, type TelemetryMap, type TelemetryStatus$1 as TelemetryStatus, type TelemetryValue, ThemeProvider, ThemeToggle, type ThemeToggleProps, type Thresholds, type Transform, TrendLine, type TrendLineProps, UNKNOWN_MARK_COLOR, UNKNOWN_MARK_COLOR_DARK, type UseBooleanIndicatorsOptions, type UseDeviceControlsOptions, type UseDragOptions, type UseDragResult, type UseSelectionOptions, type UseSelectionResult, type UseTelemetryOptions, type UseTelemetryResult, type UseTelemetryStatusOptions, type UseViewBoxOptions, type UseViewBoxResult, ValueEntry, type ValueEntryProps, type ViewBox, ZoomButton, ZoomControls, calculateThresholdStatus, createConfigBinding, createControlBinding, exampleDiagram, exportDiagram, generateRoutePoints, getAppearanceDefaults, getAppearanceSchema, getAvailableSymbols, getPortWorldPosition, getSymbolDefinition, importDiagram, mockSymbolLibrary, nodeHasPort, overlayStyles, readAppearanceValue, registerSymbol, registerSymbols, resolvePresetColor, resolveStatusColor, useBooleanIndicators, useDeviceConfigs, useDeviceControls, useDrag, useKeyboardShortcuts, useSelection, useSimulation, useTelemetry, useTelemetryStatus, useTheme, useViewBox, validateDiagram, writeAppearanceValue };