#include <design_ir.hpp>
Public Attributes | |
| InteractiveElementKind | kind = InteractiveElementKind::knob |
| float | cx = 0.0f |
| pivot / hit center, SVG coords | |
| float | cy = 0.0f |
| float | hit_radius = 0.0f |
| click-target radius, SVG coords | |
| std::string | svg_patch_d |
| Knob: the d of its needle path in the SVG (the patch target a drag rotates around (cx, cy)). | |
| float | default_value = 0.5f |
| 0..1 | |
| bool | flash = false |
| toggle only: press-flash command button (sample next/prev/random, dice) — lights on press, clears on release, instead of the sticky on/off flip. | |
| float | x = 0.0f |
| Element bounding box in SVG coords — where the native overlay widget is positioned (via DesignFrameView's panel transform). | |
| float | y = 0.0f |
| float | w = 0.0f |
| float | h = 0.0f |
| std::vector< std::string > | options |
| dropdown: the selectable options. | |
| int | selected_index = 0 |
| dropdown / tab_group: which option/tab is selected initially. | |
| std::string | placeholder |
| text_field: placeholder text shown until focused/typed. | |
| std::string | bg_color |
| text_field: the design's own field background ("#RRGGBB"), so the overlay matches it exactly and the inset-past-the-icon edge is seamless. | |
| int | target_frame = -1 |
| swap only: the frame index to activate when clicked (-1 = unset). | |
| std::string | action |
| action only: the command id fired on click (e.g. | |
| std::string | text |
| value_label only: the initial readout string painted over the rect. | |
| bool | value_left_align = false |
| value_label only: left-align the readout (for a "LABEL <value>" overlay whose value grows rightward). | |
| float | default_value_y = 0.5f |
| xy_pad only: initial normalized Y (0=top, 1=bottom). | |
| std::string | label |
| Human-readable name for the control, taken from the design's own caption text (e.g. | |
| std::string | param_key |
| Host-parameter binding key for this control, e.g. | |
| int | resolution_rung = 0 |
| Which ladder rung resolved this control's interaction. | |
| float | confidence_score = 1.0f |
| Confidence the resolved kind is correct, 0..1. 1.0 = unset/legacy path. | |
| std::vector< std::string > | conflict_signals |
| Cross-signal conflicts detected at import (e.g. | |
| bool | verification_pass = true |
| Whether render-level verification (overlay covers its node region, type doesn't visually contradict the skin) passed. | |
| std::string | factory_id |
| kind==custom only: the id the native overlay factory is registered under (register_design_control_factory). | |
| std::string | custom_props |
| kind==custom only: opaque props handed to the factory (typically JSON). | |
| std::optional< std::string > | source_node_id |
| Figma node id — provenance for the inspector's Wiring lens (maps a live control back to its source node). | |
| std::string pulp::view::IRInteractiveElement::action |
action only: the command id fired on click (e.g.
"octave_up"). Empty = unset. Maps 1:1 to DesignFrameElement::action.
| std::string pulp::view::IRInteractiveElement::bg_color |
text_field: the design's own field background ("#RRGGBB"), so the overlay matches it exactly and the inset-past-the-icon edge is seamless.
Empty → the default dark field color.
| float pulp::view::IRInteractiveElement::confidence_score = 1.0f |
Confidence the resolved kind is correct, 0..1. 1.0 = unset/legacy path.
| std::vector<std::string> pulp::view::IRInteractiveElement::conflict_signals |
Cross-signal conflicts detected at import (e.g.
"name=knob but geometry is a wide track+thumb"). Empty = no conflict. A non-empty list means the control still materializes with the best candidate but is flagged for review.
| std::string pulp::view::IRInteractiveElement::custom_props |
kind==custom only: opaque props handed to the factory (typically JSON).
Maps 1:1 to DesignFrameElement::custom_props.
| float pulp::view::IRInteractiveElement::cx = 0.0f |
pivot / hit center, SVG coords
| float pulp::view::IRInteractiveElement::cy = 0.0f |
| float pulp::view::IRInteractiveElement::default_value = 0.5f |
0..1
| float pulp::view::IRInteractiveElement::default_value_y = 0.5f |
xy_pad only: initial normalized Y (0=top, 1=bottom).
The X axis reuses default_value. Maps to DesignFrameElement::value_y.
| std::string pulp::view::IRInteractiveElement::factory_id |
kind==custom only: the id the native overlay factory is registered under (register_design_control_factory).
Maps 1:1 to DesignFrameElement::factory_id.
| bool pulp::view::IRInteractiveElement::flash = false |
toggle only: press-flash command button (sample next/prev/random, dice) — lights on press, clears on release, instead of the sticky on/off flip.
Maps 1:1 to DesignFrameElement::flash. Defaults false (sticky toggle).
| float pulp::view::IRInteractiveElement::h = 0.0f |
| float pulp::view::IRInteractiveElement::hit_radius = 0.0f |
click-target radius, SVG coords
| InteractiveElementKind pulp::view::IRInteractiveElement::kind = InteractiveElementKind::knob |
| std::string pulp::view::IRInteractiveElement::label |
Human-readable name for the control, taken from the design's own caption text (e.g.
the "DEPTH" label under a knob). Empty when the importer found no confident caption — consumers then fall back to the binding key. This is the name a host surfaces for the generated parameter (embed ABI v5 PulpEmbedParamInfo.name); unit/range are not carried here yet.
| std::vector<std::string> pulp::view::IRInteractiveElement::options |
dropdown: the selectable options.
tab_group: the tab labels. The first entry is also the design's currently-shown value when selected_index is 0.
| std::string pulp::view::IRInteractiveElement::param_key |
Host-parameter binding key for this control, e.g.
"filter.cutoff". Empty when the importer found no binding hint (a geometry-detected knob with a bare layer name) — the control still renders and drags, but drives nothing until a key is supplied. Maps 1:1 to DesignFrameElement::param_key, which DesignFrameView resolves against the framework-agnostic HostParamSurface (an embedding plug-in framework's parameter tree, or Pulp's own StateStore) when route_changes_to_host_params is on. This is the binding channel for geometry-detected interactive elements — the recognized-widget path lowers its binding through IRNode instead.
| std::string pulp::view::IRInteractiveElement::placeholder |
text_field: placeholder text shown until focused/typed.
| int pulp::view::IRInteractiveElement::resolution_rung = 0 |
Which ladder rung resolved this control's interaction.
0 = not run through the resolver ladder (legacy/unset); 1 = explicit identity (component/Code-Connect); 2 = Tier-1 affordance-inferred primitive; 3 = name/token (whole-word); 4 = registered custom factory; 5 = inert render + diagnostic (the warn).
| int pulp::view::IRInteractiveElement::selected_index = 0 |
dropdown / tab_group: which option/tab is selected initially.
| std::optional<std::string> pulp::view::IRInteractiveElement::source_node_id |
Figma node id — provenance for the inspector's Wiring lens (maps a live control back to its source node).
NOT the host-param key; that is param_key.
| std::string pulp::view::IRInteractiveElement::svg_patch_d |
Knob: the d of its needle path in the SVG (the patch target a drag rotates around (cx, cy)).
fader/switch reuse this as the translated thumb.
| int pulp::view::IRInteractiveElement::target_frame = -1 |
swap only: the frame index to activate when clicked (-1 = unset).
Maps 1:1 to DesignFrameElement::target_frame.
| std::string pulp::view::IRInteractiveElement::text |
value_label only: the initial readout string painted over the rect.
Maps 1:1 to DesignFrameElement::text.
| bool pulp::view::IRInteractiveElement::value_left_align = false |
value_label only: left-align the readout (for a "LABEL <value>" overlay whose value grows rightward).
Maps 1:1 to DesignFrameElement::value_left_align.
| bool pulp::view::IRInteractiveElement::verification_pass = true |
Whether render-level verification (overlay covers its node region, type doesn't visually contradict the skin) passed.
true = passed/unchecked.
| float pulp::view::IRInteractiveElement::w = 0.0f |
| float pulp::view::IRInteractiveElement::x = 0.0f |
Element bounding box in SVG coords — where the native overlay widget is positioned (via DesignFrameView's panel transform).
Zero for knobs.
| float pulp::view::IRInteractiveElement::y = 0.0f |